From f890e4e5504f8cca78676b6fc240fe0e6ce20987 Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Sat, 7 Mar 2026 21:01:35 -0600 Subject: [PATCH] minecraft: custom meshes for torch and fence --- include/data.inc | 8 +++ minecraft/configuration.idx | Bin 1164 -> 1236 bytes minecraft/gen/fence.obj | 48 ++++++++++++++++++ minecraft/gen/mc.py | 75 ++++++++++++++++------------ minecraft/gen/torch.obj | 40 +++++++++++++++ minecraft/gen/vertex_buffer.py | 33 ++++++++---- minecraft/per_vertex.vtx | Bin 512 -> 1280 bytes minecraft/region.-1.-1.instance.cfg | Bin 520 -> 536 bytes minecraft/region.-1.-1.instance.vtx | Bin 5260952 -> 5261248 bytes minecraft/region.-1.0.instance.cfg | Bin 520 -> 536 bytes minecraft/region.-1.0.instance.vtx | Bin 5680672 -> 5680840 bytes minecraft/region.0.-1.instance.cfg | Bin 520 -> 536 bytes minecraft/region.0.0.instance.cfg | Bin 520 -> 536 bytes minecraft/region.0.0.instance.vtx | Bin 6127680 -> 6127888 bytes src/test.cpp | 15 +++--- 15 files changed, 170 insertions(+), 49 deletions(-) create mode 100644 minecraft/gen/fence.obj create mode 100644 minecraft/gen/torch.obj diff --git a/include/data.inc b/include/data.inc index b6bef8b..c7e97c3 100644 --- a/include/data.inc +++ b/include/data.inc @@ -8,3 +8,11 @@ short index_buffer_configuration_offsets[] = { 768, 780, 798, 816, 840, 858, 882, 906, 936, 954, 978, 1002, 1032, 1056, 1086, 1116, }; +struct { + short offset; + short count; +} index_buffer_custom_offsets[] = { + {1152, 12}, // tallgrass.obj + {1164, 36}, // fence.obj + {1200, 36}, // torch.obj +}; diff --git a/minecraft/configuration.idx b/minecraft/configuration.idx index 58df8cc2522c8352b95bda36383c9a2cebf74fd6..9dd0708fb1be37f4a9ac84f8cb35110ec0d3ae33 100644 GIT binary patch delta 80 zcmeC-yu!Jmhs8rdQAt@vRZU$(Q%hS%S5M!-P{Bx1*;qx*L|xNVOUF!C-`v2$(#qP# j*3RC+(aG7x)y>_*)56Qr+S|s?$KKJ`$;Hpr-QNQM%Hk43 delta 7 Ocmcb@*~7V^hXnu(6#}yW diff --git a/minecraft/gen/fence.obj b/minecraft/gen/fence.obj new file mode 100644 index 0000000..0b05179 --- /dev/null +++ b/minecraft/gen/fence.obj @@ -0,0 +1,48 @@ +# Blender 5.0.0 +# www.blender.org +o Cube +v 0.250000 1.000000 -0.250000 +v 0.250000 -1.000000 -0.250000 +v 0.250000 1.000000 0.250000 +v 0.250000 -1.000000 0.250000 +v -0.250000 1.000000 -0.250000 +v -0.250000 -1.000000 -0.250000 +v -0.250000 1.000000 0.250000 +v -0.250000 -1.000000 0.250000 +vn -0.0000 1.0000 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.0000 +vt 0.250000 1.250000 +vt 0.500000 1.000000 +vt 0.500000 1.250000 +vt 0.250050 0.000100 +vt 0.500000 0.999900 +vt 0.250050 0.999900 +vt 0.500000 0.000100 +vt 0.749950 0.999900 +vt 0.250000 0.000000 +vt 0.500000 -0.250000 +vt 0.500000 0.000000 +vt 0.000100 0.000100 +vt 0.000100 0.999900 +vt 0.749950 0.000100 +vt 0.999900 0.999900 +vt 0.250000 1.000000 +vt 0.250000 -0.250000 +vt 0.999900 0.000100 +s 0 +f 5/1/1 3/2/1 1/3/1 +f 3/4/2 8/5/2 4/6/2 +f 7/7/3 6/8/3 8/5/3 +f 2/9/4 8/10/4 6/11/4 +f 1/12/5 4/6/5 2/13/5 +f 5/14/6 2/15/6 6/8/6 +f 5/1/1 7/16/1 3/2/1 +f 3/4/2 7/7/2 8/5/2 +f 7/7/3 5/14/3 6/8/3 +f 2/9/4 4/17/4 8/10/4 +f 1/12/5 3/4/5 4/6/5 +f 5/14/6 1/18/6 2/15/6 diff --git a/minecraft/gen/mc.py b/minecraft/gen/mc.py index b77c26d..5149a5c 100644 --- a/minecraft/gen/mc.py +++ b/minecraft/gen/mc.py @@ -4,12 +4,15 @@ from pprint import pprint from itertools import chain from collections import defaultdict import functools +import os import mcregion import vec3 import vertex_buffer import data +FAST = "FAST" in os.environ + def wrap_n(nc, chunk_c): if nc < 0: nc = 15 @@ -19,14 +22,24 @@ def wrap_n(nc, chunk_c): chunk_c = chunk_c + 1 return nc, chunk_c -non_solid_blocks = { - data.BlockID.TALL_GRASS, - data.BlockID.MUSHROOM_1, - data.BlockID.MUSHROOM_2, - data.BlockID.FLOWER, - data.BlockID.ROSE, - data.BlockID.SAPLING, -} +custom_blocks = [ + { # "tallgrass" model + data.BlockID.TALL_GRASS, + data.BlockID.MUSHROOM_1, + data.BlockID.MUSHROOM_2, + data.BlockID.FLOWER, + data.BlockID.ROSE, + data.BlockID.SAPLING, + }, + { # "fence" model + data.BlockID.FENCE, + }, + { # "torch" model + data.BlockID.TORCH, + }, +] + +non_solid_blocks = set(chain.from_iterable(custom_blocks)) def neighbor_exists(level_table, chunk_x, chunk_z, nx, ny, nz): if ny > 127 or ny < 0: @@ -67,6 +80,8 @@ def devoxelize_region(level_table, level_table_keys): for chunk_x, chunk_z in level_table_keys: for block_index in range(128 * 16 * 16): yield from block_neighbors(level_table, chunk_x, chunk_z, block_index) + if FAST: + return def build_level_table(level_table, mem, locations): for location in locations: @@ -92,15 +107,6 @@ def build_block_configuration_table(): indices.extend(vertex_buffer.faces_by_normal[vertex_buffer.normals[j]]) yield indices -non_cube_blocks = { - data.BlockID.TALL_GRASS, - data.BlockID.MUSHROOM_1, - data.BlockID.MUSHROOM_2, - data.BlockID.FLOWER, - data.BlockID.ROSE, - data.BlockID.SAPLING, -} - def pack_instance_data(position, block_id): packed = struct.pack("+;u8Ozoy~o#$~s`pN75^!t7)Q2L9vr`2u#{xH*{ z{%!u9wr8*`wx{^ion3!Pwr%e7uQre0smrgkc7(tC(Qo!po(GDa$v$lqkHO@IQ!oE? zCZ_vET5bKX_n$nehW{AvyF~vZ_}X;(xh>u$`)b=qWzv)WaIv4pX(VxuwVqdc7BY)mco`-pzx19$+(pdMSpUR}X9_7r zhx>J1e2aWa-*obkr*Y47IQKmGvw=LhPu%mIdgjmjS>im*b6(ER{gIBmxj*xB9_};q J`2B@H{eLqA(gOeh delta 6 NcmZqRYG7Hw1ONtx0kHr8 diff --git a/minecraft/region.-1.-1.instance.cfg b/minecraft/region.-1.-1.instance.cfg index 31a6a339ebd6129d75dbb1769ab83c5174ad38c1..0da889f17c11214d54644d3a418343cc07d1c910 100644 GIT binary patch literal 536 zcmXAl&r1|>7{))kYt358goT6=Gm8hsLmfiwV9m~a=f|n`5NVhGg}@Gt6txu5$r2(E zf)Yvz648q-6e4sP4-p-V^%6ly5fv*E40y0-*|~gppXYtv@B0q4zhB*LKI$q`9fv<1 zuzug+p7g;d4zpb_`orO5C*-{@Jq2hCxLlNZHKh6L7D&(c+&%6&QDgSySWLR}`CuFwu?p{bPT2@4+J+r=uCFQJZ5#zcm zy%Dh{{meqdr0D#PSd_nfI%ZnF9mZUeo=(Noq&MHiREpxKn5WY7otU>hx@#n1Y*%+L PCLGl7^r9+5Vk-Uz)^&4J literal 520 zcmXAkO-K}B9ETrWKW0s3r9`oaolQvS&>lkeqK-4~%LoX4*E(EPmw%#;Q7Q%x?uz0CoIG2b2?|I+<{9ZW!4x7&TqP`C64xH4$ zqi1m@l^?u{^ST}?$8oOILjIynYXoMxZ8Gv!pUq|Y{7ajtd@gUZBwsGrjEmN>%~i2d zli;29mb(&^b*^+h!Co;!u0O%UC^*v&ZUf4Dwd_)Hks~ z{eBFx-wfFfmjw%w6E2(bLmyr4%Cqazqqz|A*wbFC#Umr;uX%jZ`E0L8(*^Y%_js>< z2VXsqU;gE>qI=7=hD&-EF~bx2*_6SEqqhz1Vs6CX%BP+i9%xQ)7%Z{+*)SlcjtpaB z@~`1mn|gHl{L%jGg3rA6$98<8y5CduxuJRV)Mw^@-!q@8IMo6igRb| zMqrnQaE?2>XECm5m?G%TKoAbN!PEwv(A<@Ok_{Z_WF zb0^+VEIr{W?1ANkH@LGs9t_8WGEjgDOh5x$fEgr#r$92;3Q~XtYy+tv4Wxq%upMNA z9pGt@1+u|2AO~2%vmh5d2l6N$%zxuE^3LYJso)o{aVP0_^Vj4=Y^Sb!`Dgc2e!9)8 zQ2ln>r|+w?+^#Qn*ld)2))v+D+4Ht~^C+*tT8~p>mu+MZc?N9R3WWx3A2H1%J>Vvq zT(i|GvPZXW*c^$Hll&XDHf4ufdW@YJ!j5dZ1eU+Lv2!IcB14I0#(84LqQP`sC8~dM!oj(?py3O!Z?!9iZmiLiIOv-$ zG4fKl9rZGJ^CE0skP<9OT$ED7Ww4kpw!}$?mRW_LIy{ww)~p|JFmQQrbc)20fs0|4 z8egycu+=O^F%#QXIZ_>t<{Y7Dj_=fA%0B7)B$KYb=X+bGv?gC`p?M6QV!OjVzVr&Z z^1wH%W_9snxWgIJ1s;$%{5h|ZmU#yC{^{!v(JAKlG}9IGr)AUNq`y9s3hw!5RZ3g% zM^%0NFMpsn`)|KO`TzJk+!Wm%SW@ZQ-axB~oCgBq=qn6_)YMMylm5lCJMj)!*AE8z z!y#7y90kWf6?hd?gBtJ}g{v;R_g;g2jVHU0Bq` zgXRn`7=CDsi@N9&bzxDzj0M~=d>`&Ha$%82(6_=Jo53TaunKo#;4v&-xCDy_3V$i; jdU+eOdWP@;5v}4=vu=0;79SQ-7n>*Q!lFKg`WpN{23Nk{ delta 1313 zcmXZae@v8h90%~{$DI#Rcz`4a7e5|K!7>kzUk8fb@uj;{6K*P)H8<^#N?L;v#ShzZ zb9M)!SZ6(CTWf7MSARiQeXK?Nuq-PRU2Sar0bYjg$^_doLHYLnKJdru`Rw!k{d~Wl zk-kx-|JbN95HE=(O6*CoDx|x-SQ_J{(mk#sRv?PpjVK>3Yz!4P%AkM>7O=uH&>#u! zgJifL9)J{B4mL=IG)RXPkO2?EO2`B|WI;AK;33F?T*#xs#{4}!S`>$w;xfHHmH&)F z@p%4!GR3dvzp++(AIJTJm(%lUx>vD&g>efMU7?3wQKz}ZaCYmuIeD5FQ+>BSXw4kL zggN}*5QZ+sN<`V<$MploxLjbjjd8DZhX2T?PB*jj7MsW>xJwdo60OZ` z>|OO8f6z`z9W1O`Mf;5Ll0WD$P8?+4+eXc+bV(vEVEpdan8Qt7pRz;Aqztnb&FDJE zCg|z!SlD7Deq{Yd&rd8&*%w%mYHS^69~ig9=hP+ELg|;;bBZQP7bQ*Yzc5EmN|iLv z5990`5M^U{mN_Us%QpEn@xJrCf$}PAzi>E3UEJXfW?d}C5>Xe(OA%EZZ?Rt-6a92^ zS8ZnpE~<89J63Xwl|oL(6XbOG_SaZN%RM@_*LNht>PCUO$kyuHFWZKAC1#7CH6t~@ z?CW&VOw^a^HS1K2NJK-CA3Z>|lu3+G4=C5osr-^Km z{AqR^r4mPR(anqg0~uN$=Jg`mebtX8#mz^NRb2NEs@hS!=m<8r_NRY~_8yXN(dGQh zFDu#!WaA?H+uvQG9bbBES{0a8%_YspUK8lF*u)0nu|*V*owqJ4S}%;!Osgm_s1w!l`{ Q22a9vsDpaqWkGN1|J}h$uK)l5 diff --git a/minecraft/region.-1.0.instance.cfg b/minecraft/region.-1.0.instance.cfg index a50501e6b295ebf3277e945a3b505e35d106d2ea..e59d84ba902100571e76693dedbddfde9f7a140a 100644 GIT binary patch literal 536 zcmXAnO-K}R7{-6*Dppt?1eZXVo$U}2u@stEhh=u>Yj@2h!eqPHB{%XQLa|zhB{~Ei zT0&7oa4$h32Gt>ph$QI4qV_o8AvLN+Is|qQy7cTimxurRoA-I2_df%B&+)^1`XUq} zI}Q&UA-rHvIt1}o1`93lCKh2<^_3eDCYqq|Ai_U!?{$QAaiiPhsrc?~lRM(~=1iuf zv+qonr9C?)m3>e)qMXp#I1^=SqmklJl(XtD4O^TFL4MKVt=`*Rv-qug+onZMI(jU@ zbJgS56Z|+JUQCc{l~0hs*7=W>-$wh9=CM%PI@$VDo4&^M}1k#=UdJHn$Mv4M$upYzHQtN0A> zSAE;(nfijR6rZ%`=;ajs%KhO}}Vug&rq h%Wz+P;l&J>I+VAwkJTd$ctKzN<7XcaQ2PyP`X7u;b@u=O literal 520 zcmXAlO-K}R7{-6rC|hAIbWj3ecJ`o$0x1m3OU>@g?Ch?E7=(7&Q@cfnAt>zQFhmE# zLs5#09qbY;NC)fCDs_-R?StH#f7sP^SAhC%Ng zc)4How8^8x(Dlw_ItD>^g0lS5tps^^4O<8g(@klJu!RR3K)qt~LH`AxY<|fft=kMsw>nc)Z-SU zUtnaor@D3`LraI=XDGv;D93r9Z_)f~K11TA&}TzAyJvjf%8$?cTu_eX6`$e(=-u{t zqrRXg%V*sgyOQ0_Uzp7@p#3|^924T<)f`{MyT)?N>Rm<~Ic~_0U(B=8qW+tC9_!w% TN}kJYdiIWf7LGO1zShrwI<0ak diff --git a/minecraft/region.-1.0.instance.vtx b/minecraft/region.-1.0.instance.vtx index c678e5724f3dae1a42432187254ede6e1a6ffb44..dc3f540fd83e1467f5d0d75143a64ad708c2b0f4 100644 GIT binary patch delta 812 zcmXZaOH30%7zglgcDuB;P(To?fJ`gCP*}Erw58TU-C|qcVl*+tgU_Tf+|=m71BW#+ zCVDXI(TnK;6O9~3Neq-G(ijsDJ`PY19!Q9oARM$QhxK3J@XLQ^zMaX=H~YLWE9HO8 zO0VC@ib@i(@mF$MW|8qadka&7M&FX0|{iXfdUm^hjM)rIKc&#Pz7$Nh8n1a z%}@vRumu`mD|lcVY==f@f@atOEkbqhdv9fxWbtB(-;`LubmjPYIYL$DaE?C}r5t}? zQ^HhFHuHX-UuI!3m*=We(WsA#!v2M)+1j(m9Qn#uH>R(D`-S!o$ z7yV+!Qd=wRg59tO_QF1BgZ*#-+Mxqf=mZV?&;{Ml0|%iO0uY1{^g$R7K?Dv%6#8L6 zEVacFQ6rj;iD>#r{Q$o~39`oNod|c@zjfzGl7KcGNDl)M|Dyej0ajmc(C4M#=3u6hfFqU+< z&EmVHPxvO1AMECzY?2Glbn@{n`=q5&km4c}NIiLJM(0yp+?Y>2vkAwqRH?#nE~nra z9ETHd5>CNsI0I*4NH~|zHN3wwX_fy}Kdo2+^xIE=t$vc%GD4L|+z>gDtH||wnCdVt kT4AbPtFMpC9~HtlYn4yyr)k`uhRk8Udn3#BnT_}U14(8XwEzGB delta 706 zcmXZXJ!}$T7zgl|JFW+mg0)&{6}_X?)}n2}R^VDoD;&b1QfrNDbx=d>pp&wgG&+Op^1|pLj!|D7j^iT zBA?+mMnsqCv1ZXViwQX3!3+X)fC%k-E7+hD?9c@caKb+5hW*e32jC#|!Xa=$AN0dv zI09}s3dfjck+KE0wJBvds#K(Tx>k`^`4F)(_j~DyndYm~4c1?ihHXsyBxOvr_*rVQ z;up#C11WjML>J0(n&r##ioleroOZAmU*+CCy-@YALUmwmQ5Yi}@w1eBPeTB41{48=HNWbdL!{!@s}|} z?8L8^mLsgR9IgEnTSka*sj@dq{_nh=m zT^$ul#yC;vo4Wc?Xuo&Sp@upov?EQn)KK}`^iCwUu6v>}xBzkHi6-J&myd)qTuq_`75eidsz+EB}HtT-Idq!~ZHv zW$oF0)(j?Bb4bn+9!Y&CDT}``nyo#=PV%`~Y@%p4cH!^IR)^pt6ZkT)n}myS2`)nl S=HUt~z*Sgef!%9;Z~p*US^A^^ diff --git a/minecraft/region.0.-1.instance.cfg b/minecraft/region.0.-1.instance.cfg index f74e23d9f4d1d6bb409b6176094467463828d52b..774146baf22101d9454d81ca8f30b40912325a2f 100644 GIT binary patch delta 24 YcmeBRnZdGwgGqn^2n<3aKopn;05$3ZtpET3 delta 7 OcmbQi(!sKUg9!i$Apzq6 diff --git a/minecraft/region.0.0.instance.cfg b/minecraft/region.0.0.instance.cfg index 150cbfdcce7c5844cd79097dba6007387c7c3132..c913078bf2b028206a8dc27e10eb575ce3a60a27 100644 GIT binary patch literal 536 zcmXAlOK1~e6otQ<){L(j(M1r%NivIZQPf>TEP+WTlX1pOMa4}a8$o>FK%w1f5rx4Q zZiFI=Rgh#ONEL^jK&&huINm!LpfdS|S_KVfF3 zz;Pi<1@5HeJ7keoUGyzl-4yY8i>n4atU62#K=z8mUG;UIIvkO2_npHIVY0K#+a8~k zaW?9Iv&>uuqFjYD(%a1nvZIu8`8cR~d6&zp)Ia5tT@CgFmlMjj@X2LddlmbtB*KMT zRhBj1-s92k<)8HUDj&1yu}^#Ndgbv%d9!wn8^ZRn8qeex->b1!dep5kD}K7@b5>;K{N-WG4|XIORiWI#v$#{Gb4%}rhe+*Z!S2$>TfZwtBB%egn?gZz&+ zLN>`S^E%{>_L^D_8B*@W(+BvwL3+B*cIn1MoeR1PtvZ*an^r{F%lSNFY>n=?6!A!W dJUoJ7s(*fjQ-}KS<_{v8*11u(3QLot{0B)4bh7{e literal 520 zcmXAlO-NKx9L0Y&+Punis6aQ-dEcplISo z=mW8ga5jNh#2_w=qNI(p2__JUpbsQ)$c4J=jNZ-Rf6l$%>Pls7P0nT=qP3iR}!kTnzAi}=TS&DF1 z82A@q&ZqkqqWCp0x=~&hef)VC<&mWvC&~RPjF1~CR?2?!DUO%_rI=z_d@<(oK$shJ z*_Qrz$>qA{z?RE;gWjFLOkDF&Z<>Pq`(LGbq1@7kG|$v?&oT%570w!_)Wf-CD9S&d zHJp;)&}YLJ?Pcv5n$`PSUnjdKmFv%NPWtq{45Rv&v0R3U@_tbdBi?%Nap#!wc0AsQ Ux8hw`L3qB=#jPt9eBbEiKWG+n4gdfE diff --git a/minecraft/region.0.0.instance.vtx b/minecraft/region.0.0.instance.vtx index d6c02eb4baa69e29a80aafcb5284802cbe830aec..033158d3d4e84ac7953e643faad999111f7a061b 100644 GIT binary patch delta 1729 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 NAiU1Z#j$gP{{u(K$L0V4 diff --git a/src/test.cpp b/src/test.cpp index f4e794f..c3d900c 100644 --- a/src/test.cpp +++ b/src/test.cpp @@ -49,7 +49,8 @@ static unsigned int per_vertex_buffer; static const int vertex_size = 8; static const int per_vertex_size = (3 + 3 + 2) * 2; -static const int instance_cfg_length = 64 + 1; +static const int custom_block_types = 3; +static const int instance_cfg_length = 64 + custom_block_types; struct instance_cfg { struct region_instance { @@ -327,13 +328,13 @@ void draw() } ////////////////////////////////////////////////////////////////////// - // non-cube blocks + // custom blocks ////////////////////////////////////////////////////////////////////// - { - int element_count = 6 * 2; - const void * indices = (void *)((ptrdiff_t)1152); - int instance_count = instance_cfg[region_index].cfg[64].instance_count; - int base_instance = instance_cfg[region_index].cfg[64].offset / vertex_size; // index into region.0.0.instance.vtx + for (int i = 0; i < custom_block_types; i++) { + int element_count = index_buffer_custom_offsets[i].count; + const void * indices = (void *)((ptrdiff_t)index_buffer_custom_offsets[i].offset); + int instance_count = instance_cfg[region_index].cfg[64 + i].instance_count; + int base_instance = instance_cfg[region_index].cfg[64 + i].offset / vertex_size; // index into region.0.0.instance.vtx if (instance_count == 0) continue; glDrawElementsInstancedBaseInstance(GL_TRIANGLES, element_count, GL_UNSIGNED_BYTE, indices, instance_count, base_instance);