From 8f10468cc362f2e54ef41bd919cace805900c89a Mon Sep 17 00:00:00 2001 From: luboslenco Date: Mon, 27 Jan 2020 19:33:56 +0100 Subject: [PATCH] Faster raytracing --- Shaders/raytrace/raytrace_bake_ao.cso | Bin 6788 -> 6800 bytes Shaders/raytrace/raytrace_bake_bent.cso | Bin 7116 -> 7128 bytes Shaders/raytrace/raytrace_bake_light.cso | Bin 8924 -> 8968 bytes Shaders/raytrace/raytrace_bake_thick.cso | Bin 7084 -> 7096 bytes Shaders/raytrace/raytrace_brute.cso | Bin 15804 -> 16008 bytes Shaders/raytrace/src/raytrace_bake_ao.hlsl | 7 +++-- Shaders/raytrace/src/raytrace_bake_bent.hlsl | 7 +++-- Shaders/raytrace/src/raytrace_bake_light.hlsl | 19 ++++++------ Shaders/raytrace/src/raytrace_bake_thick.hlsl | 7 +++-- Shaders/raytrace/src/raytrace_brute.hlsl | 19 ++++++------ Shaders/raytrace/src/std/attrib.hlsl | 6 ++++ Sources/arm/render/RenderPathRaytrace.hx | 27 +++++------------- 12 files changed, 45 insertions(+), 47 deletions(-) diff --git a/Shaders/raytrace/raytrace_bake_ao.cso b/Shaders/raytrace/raytrace_bake_ao.cso index 89859ae8434f774921c9a292a8c91b92d5f42764..cf59d34ddb636b9bc4f8e1b6d4bfbe5d37f2e9a4 100644 GIT binary patch delta 916 zcmV;F18e+*HIOwKL|8&YZAaW!hn9VKR>!QLmaxZ60RR91kg*vj10_rs003hE1_09q z002Z-NlXI)000mG001->002Tmz}_JY007FfWdkV$Oaws?#7y2eutPY^!#udbEYO2I z)WbN?Lp{htIgo=W)Pp&gLpjI;AJ{@U$OAo;13vfx3hZ;FDWZhQUjeKmBmof+00DCZ zpfCkM0khf%lmQLGD4+r>z<|OkoT4bGlY0p<0VlJq37r9duz@({fJin7%qUC{?4S-< zz`f1kvMK zw89n!8w%zWQehQbVS=E%0R=ml4aN}*M6yj3>|!<;$1D)cHc_yXnII5ku)#QLfv|;b zqF^^OK_JS1V1ses0+9>bM8S?`f-J6Hj$ueN^{#_9P2=Tw8AzqAxe`g8>35mbK77X?LaWw zM1ra*3~z!!puq;?cn1O=wrN9Q3+liQ?hp?X1WFFbh=s}Jjg`64$)%0WZ7>dcAd+p` zAbj;OL0I5m197kck!%p!03SAFNgUh(9_#@h^no9MLMVWOD3C%ayaFuv!Y`ZyI>^I3 z*uy*&y@-NNhNU zeej2W5Q&i>2?7&@Jg7DZ$w_P|0FwaV040bDk@iS`69gg+CJ2NYYzUGK$hQ&)OKe{l zw8VzuA5;PWT!LD_Pg~mD91u`e5LT5`SRPbZ9@|?O84wVV)&zlAgAK+P69-F#K}&2X zMgk@PKqhDf{K$pnot3$j$%WCSy}1DaWd&hjX>B0BEeu*>L$MDu0RS~og^kUw%_WVj z%#Ch;N)S{b!*j7KlbcI>bDI(nO~~+E?84aW%H*a5L>)3bmpQaBvNE}*H?lIeDZx>O z49`WbZ0@a2Zmeu>O7I4i$nad~^5DvX+}z&i!syc8+~%eT`9KnN$nads-00-;px)Bl q=;o#nDB%(^Q4;_F004Oy002w?001)xfE>iLO%AaK0b#TM6@>)m5O*>F delta 940 zcmV;d15^BvHH0-8L|8&Y+_#$g$|-6G`S_=Ul9=T@0RR91gs~YX10_Hg003hE1_00n z002Z-NlXI)000mG001Z#002Tmz}_JY0076cWdkV$OalZ>GkN2{4&g8l^WX-vKo9az z592@&^&k)BKn|i%59VMF6S5A;wD_}~X9u+NdEh!Q4$1+b2g1Vlgp1k4eD z!V~}n0JGW$lmQKbDxd-@z<|OkjKV33lY0p<0VK1n37r9dFhL;3U;}Z?0g-GFMu8M2 z2zF2hMBv`$(&*CO+%_1;DGvDHFx$j|t_*L2K#;)(<5&fP6}D*u zF$$=l3av0fP~L!o9n1#ffCVDiCJJ^j8;nC12xglo*vV`#4q6~sVVfw}%}fx8GT2}o zwm{s%Hc_yDqnRKOX0X9Ha)Ho=ZQ5Y8K`hKdE#Sf~Oc0_tm>>{mz+&u;?M-fjar^?2 zY!el^u)MD~xwNx1w++S-4g|AJJmkXizR1$#HWW2?8G60gWfQ zw6ip~4aRW}M6yjJsG8E;CI|!?Y%q>=Ak<--m=L9Z$(4=KrM4?rOlKtU8r!4zEK6?mZ+%E27sK_2SC9`Ip; z@E{w1fDOa25Bsno;D-sqm24QKeb|Q$L$VM1uwmebe*lRILZ)mG_~9Qm9D_degFl3X zNQ?x52|^xJ8-&CpHWWZf0B~>;M1_E#F}An4vN<}mG&&%ltRSo^sjxh#uspW6Fft&Z zDxtbGHo7D?D!H^Uw==e~BsaP;xw*12y0kZ1w;(z?xiqmly0SSSARw&?0-**Qf@A~o zsl+h~+ZP5av7zvXlmGyhpce4cmNqvB1e6toRV5Xc2Njmb_7+A41O%itK_J#(gYmt@ zF$!U@5*rGUa0vi_30jfS7JnOvZwrH!*ih($OaQ=4RAFPYYja5>D|4fp5(HJq@LcT5 ziGCY?uH#)gIsJApXx(T@{#7VFOOw0tc ON)EsW0THtc7KH@7<9ty7 diff --git a/Shaders/raytrace/raytrace_bake_bent.cso b/Shaders/raytrace/raytrace_bake_bent.cso index 3e92e65c26305c18198a7077b3ac7af034d057d1..77a239ca0b580a8955b4be4c63e951983baa275d 100644 GIT binary patch delta 952 zcmV;p14sPKH`q5BL|8&Y$CS}t#eUB9|7Ww9^@PQ20RR91*s&QW10|Fg003hE1^^`n z002Z-NlXI)000mG004X#002Tmz}_JY0011bWdkh)Od*0G2x2C09M~Zo=3yS(U>4{> z9_nEn=%F6up&ZCT6zaho%%L3Qfe&n<9OQu>$^jqz00sCt(iBm`z<|OkoT4bGlZy#40VlJ)37!FeY#@#~Ad(FNGYS&~Jg@^6 zaBp*Xc^izw6o_OC0~T;^b9#3hi~|*jW(xxjZf|lMj6)TOZwmtsbY*xG1cD4U7zZm5 zt+0i`hJrbTR9FR9m>?){K*0`XgK@+Hk!%wMyO<5eF$)BmAZ%fq zDA>(R5C}7W*kByEK;*(UQLv+#AP{G;!8mq-;Dv44V6=fO(84X~LN81ZA~~2K5NN<+ z?2YYBZi8`z1CeYK6}hmyuQ$20voyC2#xV{AvrRnY!t%bz(&RQ6M>!C-uuU5Xa1aM_ zFoy|(9^e6uC%Lq`7l9vkPX0wVc-XT*bwx?1mQ|H3=%)^!-gT@2Y%Qv^aDtQ!~`KzHVFLy5*v;p{zKuuI(W3y{>Nh2$B zqni>0RmkvM?8@Zk(%#&r1Vj@uJQuq#HoG#pDFIQ349{f_EsU&8uIY`ejBQGAlp(`& zkt>^ftCJfmo0}56K_xOg7rH#SvLH9NH@Yyov^Tf8DMCJwL>)3bmohgxxjd-1G&i~n axhVunxP(m91ONcDPY%-u0b#Qv7O4f+R&g}| delta 964 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 delta 4899 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 diff --git a/Shaders/raytrace/raytrace_brute.cso b/Shaders/raytrace/raytrace_brute.cso index a0f86a570b9b7f74091722a3bfc47333bf173297..2fad2407b78110b9604206160bdc2832be7e7742 100644 GIT binary patch delta 11342 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 b!^`AL;KnncI#}l*mxN;RK8 diff --git a/Shaders/raytrace/src/raytrace_bake_ao.hlsl b/Shaders/raytrace/src/raytrace_bake_ao.hlsl index 51b68df0..e6f6dd41 100644 --- a/Shaders/raytrace/src/raytrace_bake_ao.hlsl +++ b/Shaders/raytrace/src/raytrace_bake_ao.hlsl @@ -3,9 +3,10 @@ #include "std/math.hlsl" struct Vertex { - float3 position; - float3 normal; - float2 tex; + uint posxy; + uint poszw; + uint nor; + uint tex; }; struct RayGenConstantBuffer { diff --git a/Shaders/raytrace/src/raytrace_bake_bent.hlsl b/Shaders/raytrace/src/raytrace_bake_bent.hlsl index 991f9a63..64cb6ef6 100644 --- a/Shaders/raytrace/src/raytrace_bake_bent.hlsl +++ b/Shaders/raytrace/src/raytrace_bake_bent.hlsl @@ -3,9 +3,10 @@ #include "std/math.hlsl" struct Vertex { - float3 position; - float3 normal; - float2 tex; + uint posxy; + uint poszw; + uint nor; + uint tex; }; struct RayGenConstantBuffer { diff --git a/Shaders/raytrace/src/raytrace_bake_light.hlsl b/Shaders/raytrace/src/raytrace_bake_light.hlsl index 51899f89..604ceca8 100644 --- a/Shaders/raytrace/src/raytrace_bake_light.hlsl +++ b/Shaders/raytrace/src/raytrace_bake_light.hlsl @@ -4,9 +4,10 @@ #include "std/attrib.hlsl" struct Vertex { - float3 position; - float3 normal; - float2 tex; + uint posxy; + uint poszw; + uint nor; + uint tex; }; struct RayGenConstantBuffer { @@ -91,16 +92,16 @@ void closesthit(inout RayPayload payload, in BuiltInTriangleIntersectionAttribut uint3 indices_sample = indices.Load3(base_index); float3 vertex_normals[3] = { - float3(vertices[indices_sample[0]].normal), - float3(vertices[indices_sample[1]].normal), - float3(vertices[indices_sample[2]].normal) + float3(S16toF32(vertices[indices_sample[0]].nor), S16toF32(vertices[indices_sample[0]].poszw).y), + float3(S16toF32(vertices[indices_sample[1]].nor), S16toF32(vertices[indices_sample[1]].poszw).y), + float3(S16toF32(vertices[indices_sample[2]].nor), S16toF32(vertices[indices_sample[2]].poszw).y) }; float3 n = normalize(hit_attribute(vertex_normals, attr)); float2 vertex_uvs[3] = { - float2(vertices[indices_sample[0]].tex), - float2(vertices[indices_sample[1]].tex), - float2(vertices[indices_sample[2]].tex) + S16toF32(vertices[indices_sample[0]].tex), + S16toF32(vertices[indices_sample[1]].tex), + S16toF32(vertices[indices_sample[2]].tex) }; float2 tex_coord = hit_attribute2d(vertex_uvs, attr); diff --git a/Shaders/raytrace/src/raytrace_bake_thick.hlsl b/Shaders/raytrace/src/raytrace_bake_thick.hlsl index 1596104d..8af10002 100644 --- a/Shaders/raytrace/src/raytrace_bake_thick.hlsl +++ b/Shaders/raytrace/src/raytrace_bake_thick.hlsl @@ -3,9 +3,10 @@ #include "std/math.hlsl" struct Vertex { - float3 position; - float3 normal; - float2 tex; + uint posxy; + uint poszw; + uint nor; + uint tex; }; struct RayGenConstantBuffer { diff --git a/Shaders/raytrace/src/raytrace_brute.hlsl b/Shaders/raytrace/src/raytrace_brute.hlsl index 9a069ad0..2e6d4ab7 100644 --- a/Shaders/raytrace/src/raytrace_brute.hlsl +++ b/Shaders/raytrace/src/raytrace_brute.hlsl @@ -4,9 +4,10 @@ #include "std/math.hlsl" struct Vertex { - float3 position; - float3 normal; - float2 tex; + uint posxy; + uint poszw; + uint nor; + uint tex; }; struct RayGenConstantBuffer { @@ -122,9 +123,9 @@ void closesthit(inout RayPayload payload, in BuiltInTriangleIntersectionAttribut uint3 indices_sample = indices.Load3(base_index); float2 vertex_uvs[3] = { - float2(vertices[indices_sample[0]].tex), - float2(vertices[indices_sample[1]].tex), - float2(vertices[indices_sample[2]].tex) + S16toF32(vertices[indices_sample[0]].tex), + S16toF32(vertices[indices_sample[1]].tex), + S16toF32(vertices[indices_sample[2]].tex) }; float2 tex_coord = hit_attribute2d(vertex_uvs, attr); @@ -140,9 +141,9 @@ void closesthit(inout RayPayload payload, in BuiltInTriangleIntersectionAttribut } float3 vertex_normals[3] = { - float3(vertices[indices_sample[0]].normal), - float3(vertices[indices_sample[1]].normal), - float3(vertices[indices_sample[2]].normal) + float3(S16toF32(vertices[indices_sample[0]].nor), S16toF32(vertices[indices_sample[0]].poszw).y), + float3(S16toF32(vertices[indices_sample[1]].nor), S16toF32(vertices[indices_sample[1]].poszw).y), + float3(S16toF32(vertices[indices_sample[2]].nor), S16toF32(vertices[indices_sample[2]].poszw).y) }; float3 n = normalize(hit_attribute(vertex_normals, attr)); diff --git a/Shaders/raytrace/src/std/attrib.hlsl b/Shaders/raytrace/src/std/attrib.hlsl index f2f6081f..3fa5f682 100644 --- a/Shaders/raytrace/src/std/attrib.hlsl +++ b/Shaders/raytrace/src/std/attrib.hlsl @@ -2,6 +2,12 @@ #ifndef _ATTRIB_HLSL_ #define _ATTRIB_HLSL_ +float2 S16toF32(uint val) { + int a = (int)(val << 16) >> 16; + int b = (int)(val & 0xffff0000) >> 16; + return float2(a, b) / 32767.0f; +} + float3 hit_world_position() { return WorldRayOrigin() + RayTCurrent() * WorldRayDirection(); } diff --git a/Sources/arm/render/RenderPathRaytrace.hx b/Sources/arm/render/RenderPathRaytrace.hx index a365ee08..a76d0d34 100644 --- a/Sources/arm/render/RenderPathRaytrace.hx +++ b/Sources/arm/render/RenderPathRaytrace.hx @@ -17,8 +17,9 @@ class RenderPathRaytrace { static var first = true; static var f32 = new kha.arrays.Float32Array(24); static var helpMat = iron.math.Mat4.identity(); - static var vb: kha.arrays.Float32Array; - static var ib: kha.arrays.Uint32Array; + static var vb_scale = 1.0; + static var vb: kha.graphics4.VertexBuffer; + static var ib: kha.graphics4.IndexBuffer; static var raysTimer = 0.0; static var raysCounter = 0; static var lastLayer: kha.Image = null; @@ -218,32 +219,18 @@ class RenderPathRaytrace { var bnoise_sobol = Scene.active.embedded.get("bnoise_sobol.k"); var bnoise_scramble = Scene.active.embedded.get("bnoise_scramble.k"); var bnoise_rank = Scene.active.embedded.get("bnoise_rank.k"); - Krom.raytraceInit(shader.bytes.getData(), untyped vb.buffer, untyped ib.buffer); + Krom.raytraceInit(shader.bytes.getData(), untyped vb.buffer, untyped ib.buffer, vb_scale); }); } static function buildData() { if (Context.mergedObject == null) arm.util.MeshUtil.mergeMesh(); var mo = Context.mergedObject; - var sc = mo.parent.transform.scale.x * mo.data.scalePos; var md = mo.data; var geom = md.geom; - var count = Std.int(geom.positions.length / 4); - vb = new kha.arrays.Float32Array(count * 8); - for (i in 0...count) { - vb[i * 8 ] = (geom.positions[i * 4 ] * sc / 32767); - vb[i * 8 + 1] = (geom.positions[i * 4 + 1] * sc / 32767); - vb[i * 8 + 2] = (geom.positions[i * 4 + 2] * sc / 32767); - vb[i * 8 + 3] = geom.normals [i * 2 ] / 32767; - vb[i * 8 + 4] = geom.normals [i * 2 + 1] / 32767; - vb[i * 8 + 5] = geom.positions[i * 4 + 3] / 32767; - vb[i * 8 + 6] = (geom.uvs[i * 2 ] / 32767); - vb[i * 8 + 7] = (geom.uvs[i * 2 + 1] / 32767); - } - - var indices = geom.indices[0]; - ib = new kha.arrays.Uint32Array(indices.length); - for (i in 0...indices.length) ib[i] = indices[i]; + vb_scale = mo.parent.transform.scale.x * md.scalePos; + vb = geom.vertexBuffer; + ib = geom.indexBuffers[0]; } static function getBakeShaderName(): String {