Script: Spinning 3D Logo

Spinning 3D Logo picture
Type
Blockly logo indicatorblockly
Date Created
Nov 15, 2022, 6:48:52 PM
Last Edit Date
May 25, 2025, 6:46:21 PM

Project Information

We created this small script of rotating Bit By Bit Developers logo that shows how to program click effects on 3D objects. You can hover on the object and it will slightly change the colour properties or you can also click on it - then it will turn pink and change the rotation direction. In a sense it is a fancy 3D button. We use physically based metallic roughness materials for logo effects.

View Full Project

Script Code

<xml xmlns="https://developers.google.com/blockly/xml">
 <variables>
  <variable id="X#D|37`{jEGj*6^s-_}S">rotationValue</variable>
  <variable id="bmahh1NB40B0_E=9-O!)">meshPromiseResult</variable>
  <variable id="p{c]|_8#R_X#*#a,^7B$">logoMesh</variable>
  <variable id="c$rBjv!DFHaw$jRw|H@#">base</variable>
  <variable id=",6y_n%;OpV+jS~)+l}`s">material</variable>
  <variable id="i,)5_]+Bmc8hzvSWnSA0">materialHover</variable>
  <variable id="Grn}]|~RxUc.fzFn.NS(">materialClick</variable>
  <variable id="aGKxYArwF6/qaBd~_OC)">upValue</variable>
  <variable id="c%A9]NAPBcSg]Gu_s.N+">pointerPressed</variable>
  <variable id="C/=HN{XQj1H@w]^dPWA3">pickResultMouseMove</variable>
  <variable id="w3^kPA(_Vzj,lzp/i[2M">timeElapsedFromPreviousFrame</variable>
  <variable id="NdS-~P-;FPaI%O]oC$rP">yCoordOfLogo</variable>
 </variables>
 <block type="variables_set" id="E7|?sas-c[{IP//Y~wcT" x="-129" y="-455">
  <field name="VAR" id="X#D|37`{jEGj*6^s-_}S">rotationValue</field>
  <value name="VALUE">
   <block type="math_number" id="Q%]W@X-@ykjC:3ba2,pQ">
    <field name="NUM">0.1</field>
   </block>
  </value>
  <next>
   <block type="bitbybit.babylon.scene.enableSkybox" id="K^%c5~@kaLFh@qjSH[ij">
    <value name="Skybox">
     <block type="bitbybit.babylon.enums.skyboxEnum" id="l-nN{al~85Fl7YQW=CJ=">
      <field name="bitbybit.babylon.enums.skyboxEnum">'city'</field>
     </block>
    </value>
    <value name="Size">
     <block type="math_number" id="RLu{etJZe@k2fKoMKnyu">
      <field name="NUM">1000</field>
     </block>
    </value>
    <value name="Blur">
     <block type="math_number" id="=.2Q,SxG,%zy3_bE|{lm">
      <field name="NUM">0.5</field>
     </block>
    </value>
    <value name="EnvironmentIntensity">
     <block type="math_number" id="x-pK}?XumX!KoJvG#e^g">
      <field name="NUM">0.7</field>
     </block>
    </value>
    <next>
     <block type="bitbybit.babylon.scene.drawDirectionalLightNoReturn" id="-uWKhi-lZJ[Jg48n!gNv">
      <value name="Direction">
       <block type="bitbybit.point.pointXYZ" id="gED(oDW}V;nDjuXAP{Pu">
        <value name="X">
         <block type="math_number" id="{g6k#*;sLp=i*|/Cz#kC">
          <field name="NUM">-100</field>
         </block>
        </value>
        <value name="Y">
         <block type="math_number" id="]F3v0BW2Y5qLCG:}O(MU">
          <field name="NUM">-100</field>
         </block>
        </value>
        <value name="Z">
         <block type="math_number" id="lu$f?T2-L^z*:dP}r#@_">
          <field name="NUM">-100</field>
         </block>
        </value>
       </block>
      </value>
      <value name="Intensity">
       <block type="math_number" id="j4:tLu^QmEhRvYvOQY:|">
        <field name="NUM">1</field>
       </block>
      </value>
      <value name="Diffuse">
       <block type="colour_picker" id="m:.fK9/0HHX[?@~]Ls~+">
        <field name="COLOUR">#ffcc99</field>
       </block>
      </value>
      <value name="Specular">
       <block type="colour_picker" id="BP{/W^YQS:lkfI(_?Sei">
        <field name="COLOUR">#ffffff</field>
       </block>
      </value>
      <value name="ShadowGeneratorMapSize">
       <block type="math_number" id="DLQ}l%R5`kwczBoTVdcl">
        <field name="NUM">1024</field>
       </block>
      </value>
      <value name="EnableShadows">
       <block type="logic_boolean" id="oXw^q;lEH}t?u`X:Pa53">
        <field name="BOOL">TRUE</field>
       </block>
      </value>
      <value name="ShadowDarkness">
       <block type="math_number" id="!5ZD`0TTdxMjJfhsHfVb">
        <field name="NUM">0</field>
       </block>
      </value>
      <next>
       <block type="bitbybit.babylon.scene.adjustActiveArcRotateCamera" id="q7/Fu65Q_^aOzm)FZc2b">
        <value name="Position">
         <block type="bitbybit.point.pointXYZ" id="|d?Lwsd]pH^R(XpA9W|D">
          <value name="X">
           <block type="math_number" id="W3SjDboyGVi!80!VVQdf">
            <field name="NUM">40</field>
           </block>
          </value>
          <value name="Y">
           <block type="math_number" id=";nnR9/3#4^)U(0T:L4cI">
            <field name="NUM">35</field>
           </block>
          </value>
          <value name="Z">
           <block type="math_number" id="OH1YA?u%?M^hFq];V/^A">
            <field name="NUM">-100</field>
           </block>
          </value>
         </block>
        </value>
        <value name="LookAt">
         <block type="bitbybit.point.pointXYZ" id="e_4I@wR[pc{HTORiGX0N">
          <value name="X">
           <block type="math_number" id="NDOJ~mP:(+$I+/*QbLS~">
            <field name="NUM">0</field>
           </block>
          </value>
          <value name="Y">
           <block type="math_number" id="o[w]xmT_]+R77!WpAU~!">
            <field name="NUM">10</field>
           </block>
          </value>
          <value name="Z">
           <block type="math_number" id="66hp6D=]x8V{nzbz/fgh">
            <field name="NUM">0</field>
           </block>
          </value>
         </block>
        </value>
        <value name="MaxZ">
         <block type="math_number" id="nZ;r(KyQN)G;-^Xu/siR">
          <field name="NUM">10000</field>
         </block>
        </value>
        <value name="PanningSensibility">
         <block type="math_number" id="S[wrY(5@UG*VzE^:HXZ,">
          <field name="NUM">1000</field>
         </block>
        </value>
        <value name="WheelPrecision">
         <block type="math_number" id="+UVsgFOww.Xqx$*dX@R)">
          <field name="NUM">3</field>
         </block>
        </value>
        <next>
         <block type="base_time_then" id="gdMliD2ciY#ulR4yq1jQ">
          <field name="Result" id="bmahh1NB40B0_E=9-O!)">meshPromiseResult</field>
          <value name="Promise">
           <block type="lists_create_with" id="56tm`=Os$n2#ZLh5q7CS">
            <mutation items="2">
            </mutation>
            <value name="ADD0">
             <block type="bitbybit.babylon.io.loadAssetIntoScene" id="Roae,dX+1L|%.z;s4j_D">
              <value name="AssetFile">
               <block type="bitbybit.asset.getFile" id="Tt4ZRRUd9-/f:0nN}tdY">
                <value name="FileName">
                 <block type="text" id="^;2gL]Ml(BnL3yDBJzy)">
                  <field name="TEXT">logo2.glb</field>
                 </block>
                </value>
               </block>
              </value>
             </block>
            </value>
            <value name="ADD1">
             <block type="bitbybit.draw.drawAnyAsync" id="tyXZ),g-XnjF$UeFi06m">
              <value name="Entity">
               <block type="bitbybit.occt.fillets.chamferEdges" id="x[zlm2C;`t6s?oBE[sCa">
                <value name="Shape">
                 <block type="bitbybit.occt.shapes.solid.createCylinder" id="U|:f)yC]D)i~jD8[lWEC">
                  <value name="Radius">
                   <block type="math_number" id="xZr4:8qHh-zy7{pxuT}!">
                    <field name="NUM">40</field>
                   </block>
                  </value>
                  <value name="Height">
                   <block type="math_number" id="}_OI4+nE88.nLRaQY70;">
                    <field name="NUM">3</field>
                   </block>
                  </value>
                  <value name="Center">
                   <block type="bitbybit.point.pointXYZ" id="(}Y}DEEnINkl8+r|]m6?">
                    <value name="X">
                     <block type="math_number" id="9|-j:8.jj+3i0+D]H5ta">
                      <field name="NUM">0</field>
                     </block>
                    </value>
                    <value name="Y">
                     <block type="math_number" id="1P.ZcAVN63{,jv]_#?Lv">
                      <field name="NUM">-5</field>
                     </block>
                    </value>
                    <value name="Z">
                     <block type="math_number" id="47p`4,1b^6rc-]5P`4(U">
                      <field name="NUM">0</field>
                     </block>
                    </value>
                   </block>
                  </value>
                  <value name="Direction">
                   <block type="bitbybit.point.pointXYZ" id="C@CN5:qj86^e$!W`(}pz">
                    <value name="X">
                     <block type="math_number" id=",k.f5^jLRAd6)Tma5[ve">
                      <field name="NUM">0</field>
                     </block>
                    </value>
                    <value name="Y">
                     <block type="math_number" id="o6)2%,tcWt.vWSqbZ$CB">
                      <field name="NUM">1</field>
                     </block>
                    </value>
                    <value name="Z">
                     <block type="math_number" id="!.*Ev~%H[(XvBK1okVyl">
                      <field name="NUM">0</field>
                     </block>
                    </value>
                   </block>
                  </value>
                 </block>
                </value>
                <value name="Distance">
                 <block type="math_number" id="{%,O(/0!_pqb|acnghr9">
                  <field name="NUM">1</field>
                 </block>
                </value>
               </block>
              </value>
              <value name="Options">
               <block type="bitbybit.draw.optionsOcctShape" id="Du8[)^5:plMU+D(SxRJ:">
                <value name="FaceOpacity">
                 <block type="math_number" id="!)TK1:OpB9Mk85Mv7g-F">
                  <field name="NUM">1</field>
                 </block>
                </value>
                <value name="EdgeOpacity">
                 <block type="math_number" id="~@vdLj(mo3YKG`T=;g/2">
                  <field name="NUM">1</field>
                 </block>
                </value>
                <value name="EdgeColour">
                 <block type="colour_picker" id="eIr6H]bY+TaSeJ]L!^%u">
                  <field name="COLOUR">#bbbbff</field>
                 </block>
                </value>
                <value name="FaceColour">
                 <block type="colour_picker" id="mZp=s/W4V76Pyu0,Him;">
                  <field name="COLOUR">#0000ff</field>
                 </block>
                </value>
                <value name="EdgeWidth">
                 <block type="math_number" id="t{lM?Gjvni%.`wG{fpu^">
                  <field name="NUM">2</field>
                 </block>
                </value>
                <value name="DrawEdges">
                 <block type="logic_boolean" id="ilZ3@l78EWjlf,(ENVC`">
                  <field name="BOOL">FALSE</field>
                 </block>
                </value>
                <value name="DrawFaces">
                 <block type="logic_boolean" id="`Q,E/AO0bGTVMhC_-Qc7">
                  <field name="BOOL">TRUE</field>
                 </block>
                </value>
                <value name="Precision">
                 <block type="math_number" id="4i.$K[3IfaQ](H)rfvS?">
                  <field name="NUM">0.11</field>
                 </block>
                </value>
                <value name="DrawEdgeIndexes">
                 <block type="logic_boolean" id="{=le7JBb0?)9b|E[j69-">
                  <field name="BOOL">FALSE</field>
                 </block>
                </value>
                <value name="EdgeIndexHeight">
                 <block type="math_number" id="91Dnp:7VplOfG-JaZ82s">
                  <field name="NUM">0.06</field>
                 </block>
                </value>
                <value name="EdgeIndexColour">
                 <block type="colour_picker" id="#:Ntot[Ik?c}Uz+l3@Cp">
                  <field name="COLOUR">#bbbbff</field>
                 </block>
                </value>
                <value name="DrawFaceIndexes">
                 <block type="logic_boolean" id="zi.L_1j?q!~b8KM%M4ft">
                  <field name="BOOL">FALSE</field>
                 </block>
                </value>
                <value name="FaceIndexHeight">
                 <block type="math_number" id="{=IjOY{NY0ewVzfS-Y`}">
                  <field name="NUM">0.06</field>
                 </block>
                </value>
                <value name="FaceIndexColour">
                 <block type="colour_picker" id="OCgHP:4~oGR7=*v%YER|">
                  <field name="COLOUR">#0000ff</field>
                 </block>
                </value>
               </block>
              </value>
             </block>
            </value>
           </block>
          </value>
          <statement name="Then">
           <block type="variables_set" id="+)`H1q-R!^+4h./07|PL">
            <field name="VAR" id="p{c]|_8#R_X#*#a,^7B$">logoMesh</field>
            <value name="VALUE">
             <block type="lists_getIndex" id="*nFj}hyeBVRuzT7*C#Lv">
              <mutation statement="false" at="false">
              </mutation>
              <field name="MODE">GET</field>
              <field name="WHERE">FIRST</field>
              <value name="VALUE">
               <block type="variables_get" id="v~b)uLKCj6l,:+$M(6!-">
                <field name="VAR" id="bmahh1NB40B0_E=9-O!)">meshPromiseResult</field>
               </block>
              </value>
             </block>
            </value>
            <next>
             <block type="variables_set" id="1Y(l_w/4L13#K5bV#jq%">
              <field name="VAR" id="c$rBjv!DFHaw$jRw|H@#">base</field>
              <value name="VALUE">
               <block type="lists_getIndex" id="K]9(HT5#2bonLJ(3HymS">
                <mutation statement="false" at="false">
                </mutation>
                <field name="MODE">GET</field>
                <field name="WHERE">LAST</field>
                <value name="VALUE">
                 <block type="variables_get" id="#ZK)CrV:AA!^nJwl2h=a">
                  <field name="VAR" id="bmahh1NB40B0_E=9-O!)">meshPromiseResult</field>
                 </block>
                </value>
               </block>
              </value>
              <next>
               <block type="bitbybit.babylon.mesh.setPickable" id="s@~rj#VPN*O/W*~dDLlX">
                <value name="BabylonMesh">
                 <block type="variables_get" id="KbAaTdgw^[*kYF9U#b:R">
                  <field name="VAR" id="p{c]|_8#R_X#*#a,^7B$">logoMesh</field>
                 </block>
                </value>
                <value name="Pickable">
                 <block type="logic_boolean" id="Px]n_p,;33Qm%D:VPZ5C">
                  <field name="BOOL">TRUE</field>
                 </block>
                </value>
                <value name="IncludeChildren">
                 <block type="logic_boolean" id="T]=EbaN;p,6iGgU9yZ56">
                  <field name="BOOL">TRUE</field>
                 </block>
                </value>
                <next>
                 <block type="bitbybit.babylon.mesh.setPickable" id="wNq+{e7COy!S,q{/1+:,">
                  <value name="BabylonMesh">
                   <block type="variables_get" id=",x~4CHG-:|q8u_*:0u;P">
                    <field name="VAR" id="c$rBjv!DFHaw$jRw|H@#">base</field>
                   </block>
                  </value>
                  <value name="Pickable">
                   <block type="logic_boolean" id="5aft}SCJ_v[Z-#*?=4S6">
                    <field name="BOOL">TRUE</field>
                   </block>
                  </value>
                  <value name="IncludeChildren">
                   <block type="logic_boolean" id="(1q[$r)u@Uz;H=8^(d30">
                    <field name="BOOL">TRUE</field>
                   </block>
                  </value>
                  <next>
                   <block type="variables_set" id="?,8lgpS_H+*W#(4]U%+d">
                    <field name="VAR" id=",6y_n%;OpV+jS~)+l}`s">material</field>
                    <value name="VALUE">
                     <block type="bitbybit.babylon.material.pbrMetallicRoughness.create" id="a72QK[UuC~@x^S(9R=np">
                      <value name="Name">
                       <block type="text" id="ba[~gsG=doD1{#5Z;/]7">
                        <field name="TEXT">Metallic Logo</field>
                       </block>
                      </value>
                      <value name="BaseColor">
                       <block type="colour_picker" id="cAPi=VU[/K$@h2_k!T3^">
                        <field name="COLOUR">#ff9966</field>
                       </block>
                      </value>
                      <value name="Metallic">
                       <block type="math_number" id="`LW5l$?||F/kN_?mZ$gB">
                        <field name="NUM">0.7</field>
                       </block>
                      </value>
                      <value name="Roughness">
                       <block type="math_number" id="90_bBM6*qk-]U}dO2k4:">
                        <field name="NUM">0.4</field>
                       </block>
                      </value>
                      <value name="Alpha">
                       <block type="math_number" id="w(m$QQ|dgM~TPA07s(RN">
                        <field name="NUM">1</field>
                       </block>
                      </value>
                      <value name="BackFaceCulling">
                       <block type="logic_boolean" id="Ka`=9{[?[yuEg,CeX5:Z">
                        <field name="BOOL">TRUE</field>
                       </block>
                      </value>
                      <value name="ZOffset">
                       <block type="math_number" id="WHV)R4QS#(Ol@Y9%oX,I">
                        <field name="NUM">0</field>
                       </block>
                      </value>
                     </block>
                    </value>
                    <next>
                     <block type="variables_set" id="W?6{?SErjk,uNAtO[)Ip">
                      <field name="VAR" id="i,)5_]+Bmc8hzvSWnSA0">materialHover</field>
                      <value name="VALUE">
                       <block type="bitbybit.babylon.material.pbrMetallicRoughness.create" id="9D?.i#9ZR=}@:rBv{0Dh">
                        <value name="Name">
                         <block type="text" id="A;G=*;tMR^vEGp!Co)~N">
                          <field name="TEXT">Metallic Logo Hover</field>
                         </block>
                        </value>
                        <value name="BaseColor">
                         <block type="colour_picker" id="a-!5S`4XVpp2CYxvgEH6">
                          <field name="COLOUR">#ff9966</field>
                         </block>
                        </value>
                        <value name="Metallic">
                         <block type="math_number" id="uqCHoF9tZ8ERc47,jciW">
                          <field name="NUM">0.6</field>
                         </block>
                        </value>
                        <value name="Roughness">
                         <block type="math_number" id="MJ2Ls?S}*adEVQiKFgeN">
                          <field name="NUM">0.5</field>
                         </block>
                        </value>
                        <value name="Alpha">
                         <block type="math_number" id=":PAK8=4sU;Fd3Vy[awf{">
                          <field name="NUM">1</field>
                         </block>
                        </value>
                        <value name="BackFaceCulling">
                         <block type="logic_boolean" id="72;-A4|A:!Rgc6`Z$hed">
                          <field name="BOOL">TRUE</field>
                         </block>
                        </value>
                        <value name="ZOffset">
                         <block type="math_number" id="p:sy$0jGt`TFu.nA-+)O">
                          <field name="NUM">0</field>
                         </block>
                        </value>
                       </block>
                      </value>
                      <next>
                       <block type="variables_set" id="3|4NprgdBgLGbv*9LHh1">
                        <field name="VAR" id="Grn}]|~RxUc.fzFn.NS(">materialClick</field>
                        <value name="VALUE">
                         <block type="bitbybit.babylon.material.pbrMetallicRoughness.create" id="s~WE@q9utDM(48p}8u6B">
                          <value name="Name">
                           <block type="text" id="zs999BL=D-VT!A?Fw`xe">
                            <field name="TEXT">Metallic Logo Click</field>
                           </block>
                          </value>
                          <value name="BaseColor">
                           <block type="colour_picker" id="TTjGER)AQ2SvuwJm}ge/">
                            <field name="COLOUR">#ff99ff</field>
                           </block>
                          </value>
                          <value name="Metallic">
                           <block type="math_number" id="vlI_f9Ac^l7A/)Dwkwhf">
                            <field name="NUM">0.6</field>
                           </block>
                          </value>
                          <value name="Roughness">
                           <block type="math_number" id="n8ej,{F[_4E9cpD1EgL!">
                            <field name="NUM">0.7</field>
                           </block>
                          </value>
                          <value name="Alpha">
                           <block type="math_number" id="VfOI`TX`}3Cg@!9A|!3k">
                            <field name="NUM">1</field>
                           </block>
                          </value>
                          <value name="BackFaceCulling">
                           <block type="logic_boolean" id="KI;(X0}}BXC*p{j}m1!X">
                            <field name="BOOL">TRUE</field>
                           </block>
                          </value>
                          <value name="ZOffset">
                           <block type="math_number" id="gXwwWL/nMTBZTmu./kP~">
                            <field name="NUM">0</field>
                           </block>
                          </value>
                         </block>
                        </value>
                        <next>
                         <block type="bitbybit.babylon.mesh.setMaterial" id="M.v!EBJpE=^-#ebA+L=:">
                          <value name="BabylonMesh">
                           <block type="variables_get" id="vpVD_!W:a7)puIKmlaT$">
                            <field name="VAR" id="p{c]|_8#R_X#*#a,^7B$">logoMesh</field>
                           </block>
                          </value>
                          <value name="Material">
                           <block type="variables_get" id="zn62EP#=YEuwfRj-K+_f">
                            <field name="VAR" id=",6y_n%;OpV+jS~)+l}`s">material</field>
                           </block>
                          </value>
                          <value name="IncludeChildren">
                           <block type="logic_boolean" id="`QM??@6ryA$HZt%F|*oT">
                            <field name="BOOL">TRUE</field>
                           </block>
                          </value>
                          <next>
                           <block type="bitbybit.babylon.mesh.setMaterial" id="Be}FhWa@*M[(S%FJ(Z-q">
                            <value name="BabylonMesh">
                             <block type="variables_get" id="Bj(H-uNgSIT!gEZjRAhj">
                              <field name="VAR" id="c$rBjv!DFHaw$jRw|H@#">base</field>
                             </block>
                            </value>
                            <value name="Material">
                             <block type="variables_get" id="Ayo~)_[wU%6GMu?jRWps">
                              <field name="VAR" id=",6y_n%;OpV+jS~)+l}`s">material</field>
                             </block>
                            </value>
                            <value name="IncludeChildren">
                             <block type="logic_boolean" id="?$PLwJ.,$Wil6Wst3+_7">
                              <field name="BOOL">TRUE</field>
                             </block>
                            </value>
                            <next>
                             <block type="variables_set" id="+*}A|wda3qf]p$%_zu6+">
                              <field name="VAR" id="aGKxYArwF6/qaBd~_OC)">upValue</field>
                              <value name="VALUE">
                               <block type="math_number" id="VCD_Q1DO9KOq~wXR6~0G">
                                <field name="NUM">0.005</field>
                               </block>
                              </value>
                              <next>
                               <block type="variables_set" id="I#ucU]O:0=dF4XDuJ-eF">
                                <field name="VAR" id="c%A9]NAPBcSg]Gu_s.N+">pointerPressed</field>
                                <value name="VALUE">
                                 <block type="logic_boolean" id="}}aa9;vl3aPp~)li|k1b">
                                  <field name="BOOL">FALSE</field>
                                 </block>
                                </value>
                                <next>
                                 <block type="base_time_on_pointer_down" id="nzsqKzk)*UQWQZ5lcMaC">
                                  <statement name="Update">
                                   <block type="variables_set" id="i!82;h*[[n.}jB}@+r,r">
                                    <field name="VAR" id="c%A9]NAPBcSg]Gu_s.N+">pointerPressed</field>
                                    <value name="VALUE">
                                     <block type="logic_boolean" id=")~)9IZp}X1(OJRg,K6n8">
                                      <field name="BOOL">TRUE</field>
                                     </block>
                                    </value>
                                    <next>
                                     <block type="variables_set" id="K=0^G,sF/XSqX)oFs}}x">
                                      <field name="VAR" id="C/=HN{XQj1H@w]^dPWA3">pickResultMouseMove</field>
                                      <value name="VALUE">
                                       <block type="bitbybit.babylon.pick.pickWithPickingRay" id="ipq}#07bW8sy(mKmF8sH">
                                       </block>
                                      </value>
                                      <next>
                                       <block type="controls_if" id="~dtKvawjyfbXN+BR?@3J">
                                        <value name="IF0">
                                         <block type="bitbybit.babylon.pick.hit" id="6Y$8[[yqNuZmB?R[W2nN">
                                          <value name="PickInfo">
                                           <block type="variables_get" id="nLD0K=j/KjjdE|y^Ahy1">
                                            <field name="VAR" id="C/=HN{XQj1H@w]^dPWA3">pickResultMouseMove</field>
                                           </block>
                                          </value>
                                         </block>
                                        </value>
                                        <statement name="DO0">
                                         <block type="bitbybit.babylon.mesh.setMaterial" id="n!0_lLl87b!l3AuL3F%9">
                                          <value name="BabylonMesh">
                                           <block type="variables_get" id="P$8}aDP{hlGg46y0?CaQ">
                                            <field name="VAR" id="p{c]|_8#R_X#*#a,^7B$">logoMesh</field>
                                           </block>
                                          </value>
                                          <value name="Material">
                                           <block type="variables_get" id="Mg#XY_6Z1Iie{msm--2W">
                                            <field name="VAR" id="Grn}]|~RxUc.fzFn.NS(">materialClick</field>
                                           </block>
                                          </value>
                                          <value name="IncludeChildren">
                                           <block type="logic_boolean" id="aqBu/a@~!q!9TJRWz]H$">
                                            <field name="BOOL">TRUE</field>
                                           </block>
                                          </value>
                                          <next>
                                           <block type="bitbybit.babylon.mesh.setMaterial" id="km*|,Spxt[eRDQz.7M*Z">
                                            <value name="BabylonMesh">
                                             <block type="variables_get" id="/wJ$ig]CLGRz61kwWlx(">
                                              <field name="VAR" id="c$rBjv!DFHaw$jRw|H@#">base</field>
                                             </block>
                                            </value>
                                            <value name="Material">
                                             <block type="variables_get" id="GP.PPQ`^X|/ae8|E!l!~">
                                              <field name="VAR" id="Grn}]|~RxUc.fzFn.NS(">materialClick</field>
                                             </block>
                                            </value>
                                            <value name="IncludeChildren">
                                             <block type="logic_boolean" id="v8u~,~,|bH$T:R+gojB,">
                                              <field name="BOOL">TRUE</field>
                                             </block>
                                            </value>
                                            <next>
                                             <block type="variables_set" id="MP^L#w;oclQ7y~:0dBds">
                                              <field name="VAR" id="X#D|37`{jEGj*6^s-_}S">rotationValue</field>
                                              <value name="VALUE">
                                               <block type="math_arithmetic" id="_x^c6UVye7DAr_WY`HfO">
                                                <field name="OP">MULTIPLY</field>
                                                <value name="A">
                                                 <block type="variables_get" id="F*(C8}g)JYcc1~t?KC)Y">
                                                  <field name="VAR" id="X#D|37`{jEGj*6^s-_}S">rotationValue</field>
                                                 </block>
                                                </value>
                                                <value name="B">
                                                 <block type="math_number" id="EO`hHd3SYQ]LN6c/[a*s">
                                                  <field name="NUM">-1</field>
                                                 </block>
                                                </value>
                                               </block>
                                              </value>
                                             </block>
                                            </next>
                                           </block>
                                          </next>
                                         </block>
                                        </statement>
                                       </block>
                                      </next>
                                     </block>
                                    </next>
                                   </block>
                                  </statement>
                                  <next>
                                   <block type="base_time_on_pointer_up" id="yt;l0~LdVe3)+WgP*xTJ">
                                    <statement name="Update">
                                     <block type="variables_set" id="o=E/HrOSp6?VZ#lyxZ5e">
                                      <field name="VAR" id="c%A9]NAPBcSg]Gu_s.N+">pointerPressed</field>
                                      <value name="VALUE">
                                       <block type="logic_boolean" id="DVv1]_PTG;JRbn7Bm;d}">
                                        <field name="BOOL">FALSE</field>
                                       </block>
                                      </value>
                                      <next>
                                       <block type="bitbybit.babylon.mesh.setMaterial" id="Ublx1W$!b?LCOqa$KT|1">
                                        <value name="BabylonMesh">
                                         <block type="variables_get" id="$d#lUtvpCY7^dWL9*jn(">
                                          <field name="VAR" id="p{c]|_8#R_X#*#a,^7B$">logoMesh</field>
                                         </block>
                                        </value>
                                        <value name="Material">
                                         <block type="variables_get" id="`*eyZjOdQ4~wrIzVp?jD">
                                          <field name="VAR" id=",6y_n%;OpV+jS~)+l}`s">material</field>
                                         </block>
                                        </value>
                                        <value name="IncludeChildren">
                                         <block type="logic_boolean" id="{%qbzDI@}9T93*;pL!U]">
                                          <field name="BOOL">TRUE</field>
                                         </block>
                                        </value>
                                        <next>
                                         <block type="bitbybit.babylon.mesh.setMaterial" id="ffVBQe+}Y58*|p|KBo[E">
                                          <value name="BabylonMesh">
                                           <block type="variables_get" id="iPUgX(LlvKa0y+Dz@~?H">
                                            <field name="VAR" id="c$rBjv!DFHaw$jRw|H@#">base</field>
                                           </block>
                                          </value>
                                          <value name="Material">
                                           <block type="variables_get" id=":#K!+aEy+!50u4mzoUU9">
                                            <field name="VAR" id=",6y_n%;OpV+jS~)+l}`s">material</field>
                                           </block>
                                          </value>
                                          <value name="IncludeChildren">
                                           <block type="logic_boolean" id="Da]d.lQQ:eJ_rP7y-1}(">
                                            <field name="BOOL">TRUE</field>
                                           </block>
                                          </value>
                                         </block>
                                        </next>
                                       </block>
                                      </next>
                                     </block>
                                    </statement>
                                    <next>
                                     <block type="base_time_update" id=";q:h6Yx0cPd,M*5k5cCe">
                                      <field name="TimePassedMs" id="w3^kPA(_Vzj,lzp/i[2M">timeElapsedFromPreviousFrame</field>
                                      <statement name="Update">
                                       <block type="variables_set" id="0W.+~M}IA|#hXevu#!m:">
                                        <field name="VAR" id="C/=HN{XQj1H@w]^dPWA3">pickResultMouseMove</field>
                                        <value name="VALUE">
                                         <block type="bitbybit.babylon.pick.pickWithPickingRay" id="/Uou{kdFw5CtGnF$Ay-/">
                                         </block>
                                        </value>
                                        <next>
                                         <block type="controls_if" id="/=f*Bu(CRwhe`[U1:ixh">
                                          <mutation elseif="1">
                                          </mutation>
                                          <value name="IF0">
                                           <block type="logic_operation" id="PwD+.?!@Nixrty~QS$_v">
                                            <field name="OP">AND</field>
                                            <value name="A">
                                             <block type="logic_negate" id="r7RA=h$f+G?RH?F^Aqb^">
                                              <value name="BOOL">
                                               <block type="variables_get" id="OOGd:=gJs8y1E_~9J=ci">
                                                <field name="VAR" id="c%A9]NAPBcSg]Gu_s.N+">pointerPressed</field>
                                               </block>
                                              </value>
                                             </block>
                                            </value>
                                            <value name="B">
                                             <block type="bitbybit.babylon.pick.hit" id="8$js?FUq-t]fG;xo=yTQ">
                                              <value name="PickInfo">
                                               <block type="variables_get" id="Y|;2LX#t#)fIH2Y+my}j">
                                                <field name="VAR" id="C/=HN{XQj1H@w]^dPWA3">pickResultMouseMove</field>
                                               </block>
                                              </value>
                                             </block>
                                            </value>
                                           </block>
                                          </value>
                                          <statement name="DO0">
                                           <block type="bitbybit.babylon.mesh.setMaterial" id="Wu~;KJ|CjIvDoCIzt-w^">
                                            <value name="BabylonMesh">
                                             <block type="variables_get" id="8/v01C^QP0i.QuqR=?Z?">
                                              <field name="VAR" id="p{c]|_8#R_X#*#a,^7B$">logoMesh</field>
                                             </block>
                                            </value>
                                            <value name="Material">
                                             <block type="variables_get" id="/3_wce;!ahTrwp$H4)%4">
                                              <field name="VAR" id="i,)5_]+Bmc8hzvSWnSA0">materialHover</field>
                                             </block>
                                            </value>
                                            <value name="IncludeChildren">
                                             <block type="logic_boolean" id="``5H]e.05I~Px)qL3N=F">
                                              <field name="BOOL">TRUE</field>
                                             </block>
                                            </value>
                                            <next>
                                             <block type="bitbybit.babylon.mesh.setMaterial" id="0nL0i5$w9hl!WItnosnU">
                                              <value name="BabylonMesh">
                                               <block type="variables_get" id="jd+~v[J|B3OK|Td.UNp~">
                                                <field name="VAR" id="c$rBjv!DFHaw$jRw|H@#">base</field>
                                               </block>
                                              </value>
                                              <value name="Material">
                                               <block type="variables_get" id="t#bqcA4CqUB.[_$kj[/^">
                                                <field name="VAR" id="i,)5_]+Bmc8hzvSWnSA0">materialHover</field>
                                               </block>
                                              </value>
                                              <value name="IncludeChildren">
                                               <block type="logic_boolean" id="?nC!M2.xM@([M))xelh:">
                                                <field name="BOOL">TRUE</field>
                                               </block>
                                              </value>
                                             </block>
                                            </next>
                                           </block>
                                          </statement>
                                          <value name="IF1">
                                           <block type="logic_negate" id="BvfBQ!{gT5C7A.K;PLB,">
                                            <value name="BOOL">
                                             <block type="variables_get" id="E^(s7wMboe_-)hP1C]l]">
                                              <field name="VAR" id="c%A9]NAPBcSg]Gu_s.N+">pointerPressed</field>
                                             </block>
                                            </value>
                                           </block>
                                          </value>
                                          <statement name="DO1">
                                           <block type="bitbybit.babylon.mesh.setMaterial" id="VxezbjEJ=d[,)Aw3geWU">
                                            <value name="BabylonMesh">
                                             <block type="variables_get" id=":^Qd7e|fR)%?VP:Q2Ltc">
                                              <field name="VAR" id="p{c]|_8#R_X#*#a,^7B$">logoMesh</field>
                                             </block>
                                            </value>
                                            <value name="Material">
                                             <block type="variables_get" id="q*.}yb,Wau`W5jRv_`-U">
                                              <field name="VAR" id=",6y_n%;OpV+jS~)+l}`s">material</field>
                                             </block>
                                            </value>
                                            <value name="IncludeChildren">
                                             <block type="logic_boolean" id="i,5*uMeQ$E{!fM8^:tbS">
                                              <field name="BOOL">TRUE</field>
                                             </block>
                                            </value>
                                            <next>
                                             <block type="bitbybit.babylon.mesh.setMaterial" id="Y^YLlk[R(.T!ez_$esXQ">
                                              <value name="BabylonMesh">
                                               <block type="variables_get" id="j{77nfx$H88)7,*}i`y(">
                                                <field name="VAR" id="c$rBjv!DFHaw$jRw|H@#">base</field>
                                               </block>
                                              </value>
                                              <value name="Material">
                                               <block type="variables_get" id=".l;R^P~^Id~y]vooZF]U">
                                                <field name="VAR" id=",6y_n%;OpV+jS~)+l}`s">material</field>
                                               </block>
                                              </value>
                                              <value name="IncludeChildren">
                                               <block type="logic_boolean" id="mkLRF9QAopDcAlRTObrt">
                                                <field name="BOOL">TRUE</field>
                                               </block>
                                              </value>
                                             </block>
                                            </next>
                                           </block>
                                          </statement>
                                          <next>
                                           <block type="bitbybit.babylon.mesh.yaw" id="8dK.p(:,h$f?9(21Ynb`">
                                            <value name="BabylonMesh">
                                             <block type="variables_get" id="7-rdB4mln!ljREm]rX@i">
                                              <field name="VAR" id="p{c]|_8#R_X#*#a,^7B$">logoMesh</field>
                                             </block>
                                            </value>
                                            <value name="Rotate">
                                             <block type="variables_get" id="}}6bec1cSFAt19rtWsaB">
                                              <field name="VAR" id="X#D|37`{jEGj*6^s-_}S">rotationValue</field>
                                             </block>
                                            </value>
                                            <next>
                                             <block type="bitbybit.babylon.mesh.moveUp" id="*{$ZzzdH^4,pdrEJqz_+">
                                              <value name="BabylonMesh">
                                               <block type="variables_get" id="FjT0.9!{3Ak`+5g$pLlr">
                                                <field name="VAR" id="p{c]|_8#R_X#*#a,^7B$">logoMesh</field>
                                               </block>
                                              </value>
                                              <value name="Distance">
                                               <block type="variables_get" id="mUVXBA9+_L}7Ug@O}NQ6">
                                                <field name="VAR" id="aGKxYArwF6/qaBd~_OC)">upValue</field>
                                               </block>
                                              </value>
                                              <next>
                                               <block type="variables_set" id="f?8nTZ(19TI}EIgh1+6@">
                                                <field name="VAR" id="NdS-~P-;FPaI%O]oC$rP">yCoordOfLogo</field>
                                                <value name="VALUE">
                                                 <block type="bitbybit.point.getY" id="9nqMztm`B%,COKkUyVIs">
                                                  <value name="Point">
                                                   <block type="bitbybit.babylon.mesh.getAbsolutePosition" id="+=cKnXg:=|Qj~+f`unzf">
                                                    <value name="BabylonMesh">
                                                     <block type="variables_get" id="]uncR$MAXQrh}|F[eBv9">
                                                      <field name="VAR" id="p{c]|_8#R_X#*#a,^7B$">logoMesh</field>
                                                     </block>
                                                    </value>
                                                   </block>
                                                  </value>
                                                 </block>
                                                </value>
                                                <next>
                                                 <block type="controls_if" id="YF6o@m9Oi*IjR1QnZf*%">
                                                  <value name="IF0">
                                                   <block type="logic_operation" id="W4pUr`o!/OxK8vCpsaSh">
                                                    <field name="OP">OR</field>
                                                    <value name="A">
                                                     <block type="logic_compare" id="=dERj:/.La]k[fVmIC%d">
                                                      <field name="OP">GTE</field>
                                                      <value name="A">
                                                       <block type="variables_get" id="q%CVLsVIMl%dw(/X7[xy">
                                                        <field name="VAR" id="NdS-~P-;FPaI%O]oC$rP">yCoordOfLogo</field>
                                                       </block>
                                                      </value>
                                                      <value name="B">
                                                       <block type="math_number" id="Bc,}B/Tc:U?mgZ=k_b7n">
                                                        <field name="NUM">2</field>
                                                       </block>
                                                      </value>
                                                     </block>
                                                    </value>
                                                    <value name="B">
                                                     <block type="logic_compare" id="QzLc*|c#Y~N1-PzW)KF`">
                                                      <field name="OP">LTE</field>
                                                      <value name="A">
                                                       <block type="variables_get" id="NGR#ih27Q}WE6SGp^*pm">
                                                        <field name="VAR" id="NdS-~P-;FPaI%O]oC$rP">yCoordOfLogo</field>
                                                       </block>
                                                      </value>
                                                      <value name="B">
                                                       <block type="math_number" id="wj)iC$7Y48iwoD.I7XNg">
                                                        <field name="NUM">0</field>
                                                       </block>
                                                      </value>
                                                     </block>
                                                    </value>
                                                   </block>
                                                  </value>
                                                  <statement name="DO0">
                                                   <block type="variables_set" id="QZ0Pdv`e]FEfh-_WvB^G">
                                                    <field name="VAR" id="aGKxYArwF6/qaBd~_OC)">upValue</field>
                                                    <value name="VALUE">
                                                     <block type="math_arithmetic" id="fEmT2UmwE6?n*RsCxq;r">
                                                      <field name="OP">MULTIPLY</field>
                                                      <value name="A">
                                                       <block type="variables_get" id="G+k#f-Prq}Jq|B0#XVL;">
                                                        <field name="VAR" id="aGKxYArwF6/qaBd~_OC)">upValue</field>
                                                       </block>
                                                      </value>
                                                      <value name="B">
                                                       <block type="math_number" id="4)9S0+QEzmZ11xVu+zLg">
                                                        <field name="NUM">-1</field>
                                                       </block>
                                                      </value>
                                                     </block>
                                                    </value>
                                                   </block>
                                                  </statement>
                                                 </block>
                                                </next>
                                               </block>
                                              </next>
                                             </block>
                                            </next>
                                           </block>
                                          </next>
                                         </block>
                                        </next>
                                       </block>
                                      </statement>
                                     </block>
                                    </next>
                                   </block>
                                  </next>
                                 </block>
                                </next>
                               </block>
                              </next>
                             </block>
                            </next>
                           </block>
                          </next>
                         </block>
                        </next>
                       </block>
                      </next>
                     </block>
                    </next>
                   </block>
                  </next>
                 </block>
                </next>
               </block>
              </next>
             </block>
            </next>
           </block>
          </statement>
         </block>
        </next>
       </block>
      </next>
     </block>
    </next>
   </block>
  </next>
 </block>
</xml>
Plans & Pricing

Choose Your Plan

Editor plans for 3D development, API keys for server-side CAD algorithms

B2B

ENTERPRISE

Custom pricing

Custom software development, dedicated servers & CAD automation at scale.

CAD Automation & Software
  • Custom software development
  • Cloud CAD automation pipelines
  • 3D configurators (STEP & GLTF)
  • Batch export jobs
  • Custom algorithms & deployment
Infrastructure & Support
  • Custom compute allocation
  • Dedicated / VPS server tenants
  • Long-running computation jobs
  • Custom upload limits & overage
  • SLA & premium support