From a1d85ce94a30167d8a128dc17728db5f266c3f07 Mon Sep 17 00:00:00 2001 From: Andrey Lesnikov Date: Tue, 7 Dec 2021 21:29:19 +0300 Subject: [PATCH 1/3] N28: Solid Editor --- content/news/028/index.md | 36 ++++++++++++++++++++++++++++++ content/news/028/solid-editor.jpg | Bin 0 -> 212810 bytes 2 files changed, 36 insertions(+) create mode 100644 content/news/028/solid-editor.jpg diff --git a/content/news/028/index.md b/content/news/028/index.md index c968f3975..6e75c3544 100644 --- a/content/news/028/index.md +++ b/content/news/028/index.md @@ -509,6 +509,42 @@ suitable for replacing traditional 2D DCC applications. [graphite-twitter]: https://twitter.com/GraphiteEditor [graphite-live-demo]: https://editor.graphite.design +### [Solid Editor][solid] + +[![youtube preview: modelling tree's branches using ball as a cursor](solid-editor.jpg)][solid-video] +_A [demo video][solid-video] of using the editor_ + +[Solid Editor][solid] is [Solid Engine][solid-engine]'s custom built voxel graphics editor. +It is designed to be a key part of the engine's asset pipeline, +enabling creation of game-ready voxel graphics assets. +Since the engine part is pretty far from being done, the author decided +to release this editor as a standalone application. + +> Besides being natively compatible with Solid Engine, the editor sports some generally interesting and unique features. +> +> - True WYSIWYG editing. The editor scene is rendered using Solid Engine's +> path tracer in real time, yielding realistic lighting while editing. +> - The possibility to edit voxels directly in 3D, by using any +> brightly colored ball as a 3D pointing device. +> Read more about the [Ball Pointer][solid-ball]. +> - A novel approach to editor tools. +> Instead of many different tools with overlapping functionality +> (e.g. "draw square" vs. "select square", or "bucket fill" vs. "magic wand") +> there is only one, a versatile Selection tool. +> Different effects can be applied to the selected voxels, +> producing the same results as regular editor tools. +> Combined with real-time effect preview, the user experience is very similar +> to that of classic graphics editors, with the added benefit +> of being able to tweak every edit before applying it. + +_Discussions: +[/r/rust_gamedev](https://reddit.com/r/rust_gamedev/comments/qrsu1n/solid_editor_a_voxel_editor)_ + +[solid]: https://solidengine.org/solid-editor +[solid-engine]: https://solidengine.org +[solid-video]: https://youtube.com/watch?v=GuVM3W9Pfdg +[solid-ball]: https://solidengine.org/ball-pointer + ## Library Updates ### [Pixels] 0.8.0 👾 diff --git a/content/news/028/solid-editor.jpg b/content/news/028/solid-editor.jpg new file mode 100644 index 0000000000000000000000000000000000000000..12856c84dc4c00afea69fab3e25a67c5ba3e45a5 GIT binary patch literal 212810 zcmeFZ2|SeF+c16$sVFHzVJbuv6|x&8gpd#+Q&F~%E!!~dN|>Z5%9JHrOv+lA>{N_> z%D(T*jCGjpJ)`~iJiq_@Jn#E|p7(t}pI_hR+njTsb6wZD_UoK;592GN7uu|^qo)J0 zu&_Yqz<&^<1JZ(6*Q{aw1%KGUU-otE>}+i88#p-DuH)Lk#l^XSlXK&yEt@xP;@QN> zxp~`Wo~^ume0*Ho`~ur}1-9_=@iKw1u!1>k?CaUt*Yj@V+{pW%{=@hP@vLKQSzFJ_ zvKv~%!@|nL!l-~?5X8a`sAUrT;}6RkK;v4Db?Y~9f&sakp*1Y5tZUd2j4*TExex0;;i*zLi4=z8SKb)rYJOZiSU62;^$c-~mQVH>}I;CAsn5|VqRwV#@rTUy%)U%$2Y^$!dV4UdeDjgw~Q z<`)*1$jd9tb+JIK-^~0O3POX`r9iob{l;0x7-<`79rPESTWIfYg&2P)QxkrGNp&H!+}| zOE^_`qs$a-r~MWAJi5NH=dAJ}BZie;gx2F!skBzv4J6;g>d11sLNhG}l}{F6K#nM1 z5?oi~H!#`u6aZ`%1z;(ma%SKo(ezWG$*-qH9y98~~WzKIrre|&mPNONzz~Aog zs>Fx-G|D&Wvp;+wTw7f)ty1Xw_SLwTZMSxFb)a6V=ge@>Nw;YZYCcnbnBNdfF4M4C z!+CLK-6v+X3f;W2@8Sv_eScFON@o! z5Mr<$jS^5gq`q7O@b+9Sa+5sRf|`d6=*Q5jIP zsWs{%140oG(i`YA{lRG3FJ1aBz$B(N1Ybe9*rM<)3}|V-E#^+HK^{ru(Z(->I|}Y_ zg;4sVK22il$Qv*5Umc#env&el-XBWFkR%^-$}+A_K|_LTwlohZB$YUUl{nS{v)Q*=%zs;6ADWqKtj%VXg|>-QB)P_!tx zdn@WcS>;GMTTNYzp;Hu=D}1C&2woV9BdRKjqCZCu9$`SZaJu~WiQH4{)PFLuoR;DT zA7ZL^&%o)|xSWM`ZpopfGHc!8+F=`4RZou3QMDs4nEJ$kuBnwX@$db2@Run_mop$) zuc#@}Qz)ly6uuL1o`kDHPvU0iYv_%?C8fu-df)aD{K_&MEEj|0&fQU{7TA~MQW%<- zaydzGJ)3_+J;xmE1FG_sn?ZbKhMlb8E|XnKETScz-Zgw|%6RHji2Q z_PQ7u*+)Be^TvMrK~#auT&J_etbS^~SG3(VwPwOxdU>D5o4DfFQe^abS6Q$5e@}c( zE1#|3+!(gLCu3*rRGE`h6MSZ!*rt+eZSITVy%YYx((*#6F1Z(dDX8mp3k+zQE-^aO zJ`Eqq!7Y7D{HYIw5!X(u;%LmpzuXH*@7@nfH6fq!7Ap@EjFrmfJ z7|=%qg2|KzL0L#t7SpD7Fb#ldnPm*fz9Xi9D3g9MatJlG4XUY#q@+%K#yMq7+((64 z=<&`b(4x2I3SD1viBQsTt`A>S5x+O|D&5*^5|N9qo>{ekwbKLeiSM=$>{KE`I{fZc z97S^4ZNKlKJ9>p;J|F9i)H62bsaejJ#Ycu=~LQGf;JUU`tMzG7j=QCvP+;kChH zEdv@UTAd&DL+B?PZK8Ee6gwn-_-FKQ+tt$Erm62PbC6!L>U{G+i22M^wy^nEjrQz+ z41`_A&;tSJpx8U1`>w@J{e-Ri3+l^+`#bkg>>1E1(T%_8NOer8Szq!E{v(RLMJ>+& zi8*hVe7nZ|HzEIm|1bXhr}f9qUjt59RZ8~`H~2^q@GGf!eb;T8MzTLun)XxQc$)sD zxBs#`kTd=CkN+{hw00JW!h%qvu#qEqo2K4k2YPu1WL!?#Lsh8ns(0gYK%+ey1N!A4 zHGcRyg^j#tSpKQkHT*?L;xA`-fu;w#b{2u|rwbQKb{-i4v8Df_0CtD%YYvQKa8# zon59qFWH4^DC!~eyEC9_>G7Fcv3yH+N`yxPE+un(!)Cse-e>(d@A+gv+D@XbmW}23 z1MftEPm2ylo3@(U5AAS7o+XK4$d)Bi4CqZJfga&JGd&nyq_l!*&ulL(lG_xI!`a-w zy;ES(L78o9Q``Xh8eOH8>eSCUVYsf&$tTsumoGxI?P zvbYACn67m3-wR!bYS= zIbfY{)Gy1*R~ARGI^Scf{=9SBB_{#oO>titV?IpZl;Sa;_~|3gZ$`J@ZozMT+$C?V zcTaO>4uWs5LIA04nI{4r{m9ftzy>Z7X)FEqaCJ(@PNr4lD=7L-!MAKlqu%KWG1W)i z;e2OksMFV9s2C@Hoy*frRWQGgEFkK%fR!NEl^ zXH`!I-uG7AM$iX=482p?u{GjAqOt&AEYsX|;Ur^4#4;7gJ>q1~yZnmX2aqaY6A5tz zMf$YzttDC7%4J5wZF8EivS3D5rC9KR=B*YtjS!q0wOos$yN_?=cQYGtQ;q%Fw!;Wr zts;g^F29sr8h{+@?rOSx?1TdkwSbKj85K$3t3{QoA&*wU`$UxLQ3KOG0HLYw%E=5K0L!^MR@V0a0a5&Y3t#d3X_ocTt}}2Yj${r zg*ot5AWv>am7S4|I_KSg;V4N^)Uz(aav3El(Qq11mCLV?UEwz-OkHI_RL=+W`ku`n z{QQgM77O6yAtj?n!pnqigWG!2p22IVu<%RKbj7!u-m)R`xy5n|@MqsX+Z;F$FI9a@ z4eo(DKd?h-8>omsNA7$cD<-RSv8wagHM6K{p;mXY1M05k0G+4pt7_0&Zo2YuIOtFw zDZj;lI+zv{muA@AjPQFTCGMtknY``Oj6P9#s=wo#^TX_DfqhTPxGZb@?XQm9*u?9T zwjY(vfcnfCP@+@+a%>qQNB?12iD8uFso;_k4#B*}+Q3>}NpaAz7*% zwqkz@eQ)zae+Fd0^xBVh7WwLvbd_O5Q+k>z_OYunj(U6VJh$` zriy8es;Pi@g8hI*jeeR}PQ~Sw%!NcJ)A^T#4I3WzPn3}+F4X$S=a)G4nZh24iwSt; zOhE%-3t1ff&#qKwI`xXbN5riQU+Hjdm)SH`&RKPJs$QwinE{onQjZSM_kOW!T2&n0o;L4);tVws=l1MMh#r0lia%d@DQ4y=2ZuB`>d_+hYAm%Z1b zC2D^A66_nkbUWd?nrP~`iD;dwaqEFYyCTItEj!9R7V}vPc1H%P%VhceKKE~|N=|ZG zJ6rqW9$P}cSS@S3;B}hx=VYaQHc8zfuE!0=NqWwnuuZu%MFS!O3TYbDUVIninQfzr znRl>18TN@=`k8}*2HNFSJ5v3jM00-&R<|8^5__UdE$il6G0Sh(u50%neuJKzBCWdt z%oD^bj_;AVqo13`S=USt?qxc@(R}R>bJ(I@lk}2uN_dxAX8!dN%KEowWei!uE3UnW znX>PDG>20^*q%-(|yUGBJ$r(yWCDSm&v%W)LJfy4L2h{6+;1LCgOAlbhdJ}?ao z#?T%3TOLvO5F_}+DqGFdnh>r*LrP{b-_BE1(Bz_cn8+Lh8oehymEB zbcMuuKR9-1uGf}nKisg!#2_y`=fCDbC8X#oDX_|d7$(-K9M>0Gjw!By1SZ!GH?aO+ z+~A1kj_4ME%`G#aU=DH<3^W)}3Z6oQR~5m_x&`AZ0}{_1*>|NNtoHqh0SIlJ=`+w9 z{HkYea}G6*DlJf`@X}B`QJs~}pMOW)9X0cj0c|%S^^~*HQSjBqTr&}F3j02MFT788 z95uf>buXpgCUqW8Mu_nLM2IHa(tl&0qw`(`$1q1YjcajbXtGIr42^9+d=CTK5KNp# zAB7834|YspmU>a)Fk&%PjsY33HvDI(l2Zos8{05ZsM|1NVy^7UI;&tqI&WZE!~8)& z8Nd*;x;`elU$~3@5#7o!bn1Ph0RrTiKGX_Gm~gCAM<(iD=tiiLw4dlWdV@iM@PlGM z8MGDyx;@i}{y7h{NPQqNfPW_x%>4HWE%gq7QDsqFsOAwG88)Cxl|_T^GtBR{0U8|6 z4)hC$nX8kfN_H93Z>)Y7Avy-I03yQ}(B~1_GHgH-G=5@s!Q=XLoKf>UOqodnG6d7m z%XizETq*8z4B!U{IKeTgeYqU@UMa~?%o#i5(Q>f(=@=T+;wmmQMN+F{b(qR;D`we z@RfC|3xiz`06<(<6~?JX7=08hd#(=@Ja8OSXAIm)<>eOpjs{_`M?KLc6P|JZF+SU! zXkmIokfUQtt*Tc@k##m{`H5r1DAJ!;Sg!#RPo||{&>FyOz!3&$5JIU(iD&WU;TweY zr~9P~>F!+_RjW{o{`JGjX(s zj0k3$QxDU3pvef^UyTxv4o!i?_Cx;0i9lhw@h zC(TNc#(T$B6zTls<}LgRR)l9drv*^S;Y6v9tHz76?xD=Wt4h3Hgerga#AyFe z&vPeF@N;VGcDk!?GWk%9XoVYIbk|~_BQ^76`>5mq0r>Me-Q&s{J+kb zK^@7&=eN;`D5ep%0sTiUjIMe%rfQNH5CQw_THRiOng6Lun5>TY%Mbq}Z+;CS19khU z<7lpcZqyGeVJfdXGdg|m0^XQuP^;kwSlLemzxsX{**~AnRO?kd2xXR7$&vGROsAsp z-2`E@fK|uyea#aiQvW|b2bBUduCJOn+8V!V;+_c+SGQ?||1kR>3Bw=6EPnznz;e|Q z-KK%Wry6Yd0I&C(+W*P{-wAg4%>)sF1!mt*KlOVNF-+G0r2I<=MlccNL6E(yMnPns zrc&bb8@fR9z`^|LX8NFC4dlT4@Rq_s^T>H$;HQ2jB1}*A^E*OmI?+dHmQ!?e1~7n` z!TpQ@zZ)eUT{`2+gWGf)d;SFeZ!vk*>_h)!nD`@REY}D%>Z;wS`8N^ZXEb02fcPW! zs}XLb9QGrwf(3H^ZV~FuOz=D3u1a?fWJy84WBenk z{n2150dvu~f4=A;?N!z>HT|Ek4yd9(dnD7+ezE*7_5)MB2TxxOS(Ewggc6I`s}6IgZrHLp4gi&qrdoiltnealCF^+vA*Dg?@;MK=1Ow1 z@{lqOPwGg|LkX_KzOK2#>&5*V&l7BAHnd+glmF9XRpO9-*O?Wd#+(CX%P`V1o^}8> zU=%lya_3x7nEU!FzgwtqWaqa54zYNtwpYd-0q0!#W^HB_-fDnk0;Gx{m0k5@$Ai`V z&M~tTkR~9M8;#o!euFUsKjjzk!0-KTD9kpQ@rn{(cNHC)g9rNX~kg!_JqrTn(?56AXr?an{kXW;*0?%8~G(|bFj zoEdCxHPe@Bj{CMXL7kh<-}BQtK(6%bJ5~+GssKuqgFBcNRt%ljHVqUns|^h9tL#>g z-3R@t)_*kSddMcf(`$I2_BiH8aj`^U?`IYizZUc7!fZiWv*C9-56TH}(c?$`!hp^# z88eggrN0dFcgqEj`U4Lb$e)gCSgj}$dnQH3MiGCq_%D7lOTu4>V4y}Y{!t?Y(r$LC zbN<1Szu2Sx7mh#KgGRjxOaX<+Z>j&S0;`3{Pb8?a`>pU%QKw}^vdPRMxA(j(NR2y3$OwQjb!1QUqTZDL^lfNKO;^Qv83pG z3>sus_&);@X!wtk1=Cp=(5|0)>-I};R|WH8HL3aTSt6Mw;!lqaQu~n}VxrG)$%Owc z8Q3o$43d0iF#j$l&?utNdH+B|HhKT6xLlPC*gE|cUv$ZTMjKFDVo+tj5i#rHUj?o1 zs$hPFj~cLf!c1~jV+pe{H}fYZc%RN6b_N8){WBtbuVB7M2k_k%1hhY~fU^B>I|Cucnf?s&Rz#V_v8T?OK{4JQJKM-BP@XX)S*xq&KNWjEZ!twf7o7VJR zuMf_>a@z_WEj4-1XtPaIfC$)j`saN6gdoOsa4-AD%<*EtHx#}I_aqCQet`i+%^p~3 zgDs;oaDQ^^FV-#V(zgb>FE7Q+@iml6#;+TKu8j+@PD^jd$vCOk5}xH^lqvQ8NasB4 zrWzTPcoVG*D3*XFhg8J6-|~K%t8O*5Z!+Pd6Rc1T;_wV)u{}a`pzADw8qR|5au#1@ zuyF$eDs@vk66EvBO3Q+N6y|@E~CJ(?w#%$RsoX$9>2
Y_U78KIVJ+*i2P&m!~C5ERlPgUt(4K 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

pNu68uiudM$kr&fVCN~ovg$H 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