A 3D Renderengine which is perfectly suited for on-chain / composable SVGs.
This project is heavily inspired by LoneCoders Code-It-Yourself! 3D Graphics Engine Youtube Series. Which inspired me to build my own 3D SVG Renderengine.
The Goal
is to generate a SVG with a 3D representation on chain with less data as possible. A solidity smart contract has a limit of 24 kb. Which means the engine should have less then 10-15kb (currently 20-25kb). BUT a javascript version can also generate a 3D SVG off-chain and send the points to the contract.
As DataUrl
data:text/html;base64,CjwhRE9DVFlQRSBodG1sPgo8aHRtbD4KICAgIDxoZWFkZXI+CiAgICA8L2hlYWRlcj4KICAgIDxib2R5PgogICAgICAgIDxzdmcgaWQ9IjJkIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9zdmc+CiAgICAgICAgPGNhbnZhcyBpZD0iM2QiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KICAgICAgICA8c2NyaXB0PmNsYXNzIFZlY3RvcjN7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXMudz0xfX1jbGFzcyBUcmlhbmdsZXtjb25zdHJ1Y3Rvcih0LGUsaSxzLG8sbixhLHIsYyl7dGhpcy5wMD1uZXcgVmVjdG9yMyh0LGUsaSksdGhpcy5wMT1uZXcgVmVjdG9yMyhzLG8sbiksdGhpcy5wMj1uZXcgVmVjdG9yMyhhLHIsYyksdGhpcy5jb2xvcj0wfX1jbGFzcyBNZXNoe2NvbnN0cnVjdG9yKHQpe3RoaXMudHJpcz1bXSx0LmZvckVhY2goKHQ9PntsZXQgZT1uZXcgVHJpYW5nbGUodFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0sdFs2XSx0WzddLHRbOF0pO3RoaXMudHJpcy5wdXNoKGUpfSkpfX1jbGFzcyBNYXQ0eDR7Y29uc3RydWN0b3IoKXt0aGlzLm09bmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgoKT0+bmV3IEFycmF5KDQpLmZpbGwoMCkpKX19Y2xhc3MgVmVjdG9ye2FkZCh0LGUpe3JldHVybiBuZXcgVmVjdG9yMyh0LngrZS54LHQueStlLnksdC56K2Uueil9c3ViKHQsZSl7cmV0dXJuIG5ldyBWZWN0b3IzKHQueC1lLngsdC55LWUueSx0LnotZS56KX1tdWwodCxlKXtyZXR1cm4gbmV3IFZlY3RvcjModC54KmUsdC55KmUsdC56KmUpfWRpdih0LGUpe3JldHVybiBuZXcgVmVjdG9yMyh0LngvZSx0LnkvZSx0LnovZSl9ZG90UHJvZHVjdCh0LGUpe3JldHVybiB0LngqZS54K3QueSplLnkrdC56KmUuen1sZW5ndGgodCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRvdFByb2R1Y3QodCx0KSl9bm9ybWFsaXNlKHQpe2NvbnN0IGU9dGhpcy5sZW5ndGgodCk7cmV0dXJuIG5ldyBWZWN0b3IzKHQueC9lLHQueS9lLHQuei9lKX1jcm9zc1Byb2R1Y3QodCxlKXtyZXR1cm4gbmV3IFZlY3RvcjModC55KmUuei10LnoqZS55LHQueiplLngtdC54KmUueix0LngqZS55LXQueSplLngpfWludGVyc2VjdFBsYW5lKHQsZSxpLHMpe2U9dmMubm9ybWFsaXNlKGUpO2NvbnN0IG89LWRvdFByb2R1Y3QoZSx0KSxuPWRvdFByb2R1Y3QoaSxlKSxhPSgtby1uKS8oZG90UHJvZHVjdChzLGUpLW4pLHI9dmMuc3ViKHMsaSksYz12Yy5tdWwocixhKTtyZXR1cm4gdmMuYWRkKGksYyl9fWNsYXNzIE1hdHJpeHtjb25zdHJ1Y3Rvcigpe3RoaXMudmM9bmV3IFZlY3Rvcn1tdWx0aXBseVZlY3Rvcih0LGUpe2NvbnN0IGk9bmV3IFZlY3RvcjM7cmV0dXJuIGkueD1lLngqdC5tWzBdWzBdK2UueSp0Lm1bMV1bMF0rZS56KnQubVsyXVswXStlLncqdC5tWzNdWzBdLGkueT1lLngqdC5tWzBdWzFdK2UueSp0Lm1bMV1bMV0rZS56KnQubVsyXVsxXStlLncqdC5tWzNdWzFdLGkuej1lLngqdC5tWzBdWzJdK2UueSp0Lm1bMV1bMl0rZS56KnQubVsyXVsyXStlLncqdC5tWzNdWzJdLGkudz1lLngqdC5tWzBdWzNdK2UueSp0Lm1bMV1bM10rZS56KnQubVsyXVszXStlLncqdC5tWzNdWzNdLGl9bWFrZUlkZW50aXR5KCl7Y29uc3QgdD1uZXcgTWF0NHg0O3JldHVybiB0Lm1bMF1bMF09MSx0Lm1bMV1bMV09MSx0Lm1bMl1bMl09MSx0Lm1bM11bM109MSx0fW1ha2VSb3RhdGlvblgodCl7Y29uc3QgZT1uZXcgTWF0NHg0O3JldHVybiBlLm1bMF1bMF09MSxlLm1bMV1bMV09TWF0aC5jb3ModCksZS5tWzFdWzJdPU1hdGguc2luKHQpLGUubVsyXVsxXT0tTWF0aC5zaW4odCksZS5tWzJdWzJdPU1hdGguY29zKHQpLGUubVszXVszXT0xLGV9bWFrZVJvdGF0aW9uWSh0KXtjb25zdCBlPW5ldyBNYXQ0eDQ7cmV0dXJuIGUubVswXVswXT1NYXRoLmNvcyh0KSxlLm1bMF1bMl09TWF0aC5zaW4odCksZS5tWzJdWzBdPS1NYXRoLnNpbih0KSxlLm1bMV1bMV09MSxlLm1bMl1bMl09TWF0aC5jb3ModCksZS5tWzNdWzNdPTEsZX1tYWtlUm90YXRpb25aKHQpe2NvbnN0IGU9bmV3IE1hdDR4NDtyZXR1cm4gZS5tWzBdWzBdPU1hdGguY29zKHQpLGUubVswXVsxXT1NYXRoLnNpbih0KSxlLm1bMV1bMF09LU1hdGguc2luKHQpLGUubVsxXVsxXT1NYXRoLmNvcyh0KSxlLm1bMl1bMl09MSxlLm1bM11bM109MSxlfW1ha2VUcmFuc2xhdGlvbih0LGUsaSl7Y29uc3Qgcz1uZXcgTWF0NHg0O3JldHVybiBzLm1bMF1bMF09MSxzLm1bMV1bMV09MSxzLm1bMl1bMl09MSxzLm1bM11bM109MSxzLm1bM11bMF09dCxzLm1bM11bMV09ZSxzLm1bM11bMl09aSxzfW1ha2VQcm9qZWN0aW9uKHQsZSxpLHMpe2NvbnN0IG89MS9NYXRoLnRhbiguNSp0LzE4MCozLjE0MTU5KSxuPW5ldyBNYXQ0eDQ7cmV0dXJuIG4ubVswXVswXT1lKm8sbi5tWzFdWzFdPW8sbi5tWzJdWzJdPXMvKHMtaSksbi5tWzNdWzJdPS1zKmkvKHMtaSksbi5tWzJdWzNdPTEsbi5tWzNdWzNdPTAsbn1tdWx0aXBseU1hdHJpeCh0LGUpe2NvbnN0IGk9bmV3IE1hdDR4NDtmb3IobGV0IHM9MDtzPDQ7cysrKWZvcihsZXQgbz0wO288NDtvKyspaS5tW29dW3NdPXQubVtvXVswXSplLm1bMF1bc10rdC5tW29dWzFdKmUubVsxXVtzXSt0Lm1bb11bMl0qZS5tWzJdW3NdK3QubVtvXVszXSplLm1bM11bc107cmV0dXJuIGl9cG9pbnRBdCh0LGUsaSl7bGV0IHM9dGhpcy52Yy5zdWIoZSx0KTtzPXRoaXMudmMubm9ybWFsaXNlKHMpO2NvbnN0IG89dGhpcy52Yy5tdWwocyx0aGlzLnZjLmRvdFByb2R1Y3QoaSxzKSk7bGV0IG49dGhpcy52Yy5zdWIoaSxvKTtuPXRoaXMudmMubm9ybWFsaXNlKG4pO2NvbnN0IGE9dGhpcy52Yy5jcm9zc1Byb2R1Y3QobixzKSxyPW5ldyBNYXQ0eDQ7cmV0dXJuIHIubVswXVswXT1hLngsci5tWzBdWzFdPWEueSxyLm1bMF1bMl09YS56LHIubVswXVszXT0wLHIubVsxXVswXT1uLngsci5tWzFdWzFdPW4ueSxyLm1bMV1bMl09bi56LHIubVsxXVszXT0wLHIubVsyXVswXT1zLngsci5tWzJdWzFdPXMueSxyLm1bMl1bMl09cy56LHIubVsyXVszXT0wLHIubVszXVswXT10Lngsci5tWzNdWzFdPXQueSxyfXF1aWNrSW52ZXJzZSh0KXtjb25zdCBlPW5ldyBNYXQ0eDQ7cmV0dXJuIGUubVswXVswXT10Lm1bMF1bMF0sZS5tWzBdWzFdPXQubVsxXVswXSxlLm1bMF1bMl09dC5tWzJdWzBdLGUubVswXVszXT0wLGUubVsxXVswXT10Lm1bMF1bMV0sZS5tWzFdWzFdPXQubVsxXVsxXSxlLm1bMV1bMl09dC5tWzJdWzFdLGUubVsxXVszXT0wLGUubVsyXVswXT10Lm1bMF1bMl0sZS5tWzJdWzFdPXQubVsxXVsyXSxlLm1bMl1bMl09dC5tWzJdWzJdLGUubVsyXVszXT0wLGUubVszXVswXT0tKHQubVszXVswXSplLm1bMF1bMF0rdC5tWzNdWzFdKmUubVsxXVswXSt0Lm1bM11bMl0qZS5tWzJdWzBdKSxlLm1bM11bMV09LSh0Lm1bM11bMF0qZS5tWzBdWzFdK3QubVszXVsxXSplLm1bMV1bMV0rdC5tWzNdWzJdKmUubVsyXVsxXSksZS5tWzNdWzJdPS0odC5tWzNdWzBdKmUubVswXVsyXSt0Lm1bM11bMV0qZS5tWzFdWzJdK3QubVszXVsyXSplLm1bMl1bMl0pLGUubVszXVszXT0xLGV9fWZ1bmN0aW9uIFRyaWFuZ2xlX0NsaXBBZ2FpbnN0UGxhbmUodCxlLGkscyxvKXtmdW5jdGlvbiBuKGkpe2Eubm9ybWFsaXNlKGkpO3JldHVybiBlLngqaS54K2UueSppLnkrZS56Kmkuei1hLmRvdFByb2R1Y3QoZSx0KX1jb25zdCBhPW5ldyBWZWN0b3I7ZT1hLm5vcm1hbGlzZShlKTtsZXQgcj1uZXcgQXJyYXkoMykuZmlsbChuZXcgVmVjdG9yMyksYz0wLG09bmV3IEFycmF5KDMpLmZpbGwobmV3IFZlY3RvcjMpLGw9MDtjb25zdCBoPW4oaS5wMCkscD1uKGkucDEpLGQ9bihpLnAyKTtyZXR1cm4gaD49MD8oYysrLHJbY109aS5wMCk6KGwrKyxtW2xdPWkucDApLHA+PTA/KGMrKyxyW2NdPWkucDEpOihsKyssbVtsXT1pLnAxKSxkPj0wPyhjKysscltjXT1pLnAyKToobCsrLG1bbF09aS5wMiksMD09Yz8wOjM9PWM/KHM9aSwxKToxPT1jJiYyPT1sPyhzLmNvbG9yPWkuY29sb3Iscy5wMD1yWzBdLHMucDE9YS5pbnRlcnNlY3RQbGFuZSh0LGUsclswXSxtWzBdKSxzLnAyPWEuaW50ZXJzZWN0UGxhbmUodCxlLHJbMF0sbVsxXSksMSk6Mj09YyYmMT09bD8ocy5jb2xvcj1pLmNvbG9yLG8uY29sb3I9aS5jb2xvcixzLnAwPXJbMF0scy5wMT1yWzFdLHMucDI9YS5pbnRlcnNlY3RQbGFuZSh0LGUsclswXSxtWzBdKSxvLnAwPXJbMV0sby5wMT1zLnAyLG8ucDI9YS5pbnRlcnNlY3RQbGFuZSh0LGUsclsxXSxtWzBdKSwyKTp2b2lkIDB9Y29uc3QgUmVuZGVyRW5naW5lPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jb25maWc9e3JlbmRlcjp7bG9vcDoxLGFuaW1hdGU6MTAsZWxhcHNlX3RpbWU6LjAzfSxtZXNoOntmaWxlOiIuL3ZlcnNpb24vNy1jbGFzcy9wb2x5aGVkcm9uLm9iaiIsbG9hZF9mcm9tX2ZpbGU6MCxzY2FsZTouODUsZmxvYXRfc2l6ZTowfSxjYW52YXM6e3dpZHRoOjQwMCxoZWlnaHQ6NDAwfSxjYW1lcmE6e3Bvc2l0aW9uOnt4OjIuNSx5OjIsejowfSxsb29rX2F0Ont5YXc6MCxkaXN0YW5jZToiIn19LHN0eWxlOntjb2xvcjp7YmFja2dyb3VuZDoibGlnaHRHcmV5In0sc3Ryb2tlOnt3aWR0aDoxLGNvbG9yOiJibGFjayJ9LHNoYWRvdzp7cmFuZ2U6MjAwfX19LHRoaXMudkNhbWVyYSx0aGlzLmVsYXBzZWRUaW1lLHRoaXMudkxvb2tEaXIsdGhpcy5jYW52YXMsdGhpcy5zdmcsdGhpcy5jdHh9aW5pdENhbWVyYSgpe3RoaXMudkNhbWVyYT1uZXcgVmVjdG9yMyh0aGlzLmNvbmZpZy5jYW1lcmEucG9zaXRpb24ueCx0aGlzLmNvbmZpZy5jYW1lcmEucG9zaXRpb24ueSx0aGlzLmNvbmZpZy5jYW1lcmEucG9zaXRpb24ueiksdGhpcy5lbGFwc2VkVGltZT0wLHRoaXMudkxvb2tEaXI9bmV3IFZlY3RvcjN9aW5pdERvbSgpe1tbInN2ZyIsIjJkIl0sWyJjYW52YXMiLCIzZCJdXS5mb3JFYWNoKCh0PT57bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0WzBdKTtlLmlkPXRbMV0sZS5zZXRBdHRyaWJ1dGUoIndpZHRoIix0aGlzLmNvbmZpZy5jYW52YXMud2lkdGgpLGUuc2V0QXR0cmlidXRlKCJoZWlnaHQiLHRoaXMuY29uZmlnLmNhbnZhcy5oZWlnaHQpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSk7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodFsxXSl9KSk7dGhpcy5jYW52YXM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIjNkIiksdGhpcy5zdmc9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIjJkIiksdGhpcy5jdHg9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKSx0aGlzLmN0eC5maWxsU3R5bGU9dGhpcy5jb25maWcuc3R5bGUuY29sb3IuYmFja2dyb3VuZCx0aGlzLmN0eC5maWxsUmVjdCgwLDAsdGhpcy5jb25maWcuY2FudmFzLndpZHRoLHRoaXMuY29uZmlnLmNhbnZhcy5oZWlnaHQpLHRoaXMuY3R4LmxpbmVXaWR0aD10aGlzLmNvbmZpZy5zdHlsZS5zdHJva2Uud2lkdGgsdGhpcy5jdHguc3Ryb2tlU3R5bGU9dGhpcy5jb25maWcuc3R5bGUuc3Ryb2tlLmNvbG9yfWluaXRFdmVudExpc3RlbmVyKCl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCh0PT57aWYodC5kZWZhdWx0UHJldmVudGVkKXJldHVybjtsZXQgZT0wO3N3aXRjaCh0LmtleSl7Y2FzZSJBcnJvd0Rvd24iOnRoaXMuY29uZmlnLmNhbWVyYS5wb3NpdGlvbi55LT0xLGU9MTticmVhaztjYXNlIkFycm93VXAiOnRoaXMuY29uZmlnLmNhbWVyYS5wb3NpdGlvbi55Kz0xLGU9MTticmVhaztjYXNlIkFycm93TGVmdCI6dGhpcy5jb25maWcuY2FtZXJhLnBvc2l0aW9uLngrPTEsZT0xO2JyZWFrO2Nhc2UiQXJyb3dSaWdodCI6dGhpcy5jb25maWcuY2FtZXJhLnBvc2l0aW9uLngtPTEsZT0xO2JyZWFrO2Nhc2UidyI6dGhpcy5jb25maWcuY2FtZXJhLmxvb2tfYXQuZGlzdGFuY2U9ImZvcndhcmQiLGU9MTticmVhaztjYXNlImEiOnRoaXMuY29uZmlnLmNhbWVyYS5sb29rX2F0Lnlhdy09LS4xLGU9MTticmVhaztjYXNlInMiOnRoaXMuY29uZmlnLmNhbWVyYS5sb29rX2F0LmRpc3RhbmNlPSJiYWNrd2FyZCIsZT0xO2JyZWFrO2Nhc2UiZCI6dGhpcy5jb25maWcuY2FtZXJhLmxvb2tfYXQueWF3Kz0tLjEsZT0xO2JyZWFrO2RlZmF1bHQ6cmV0dXJufXRoaXMuY29uZmlnLnJlbmRlci5sb29wfHwxIT1lfHx0aGlzLnJlbmRlclNjcmVlbih7bWF0UHJvajptYXRQcm9qLG1lc2g6bWVzaH0pLHQucHJldmVudERlZmF1bHQoKX0pLDEpfW1lc2hDdWJlKCl7cmV0dXJuW1swLDAsMCwwLDEsMCwxLDEsMF0sWzAsMCwwLDEsMSwwLDEsMCwwXSxbMSwwLDAsMSwxLDAsMSwxLDFdLFsxLDAsMCwxLDEsMSwxLDAsMV0sWzEsMCwxLDEsMSwxLDAsMSwxXSxbMSwwLDEsMCwxLDEsMCwwLDFdLFswLDAsMSwwLDEsMSwwLDEsMF0sWzAsMCwxLDAsMSwwLDAsMCwwXSxbMCwxLDAsMCwxLDEsMSwxLDFdLFswLDEsMCwxLDEsMSwxLDEsMF0sWzEsMCwxLDAsMCwxLDAsMCwwXSxbMSwwLDEsMCwwLDAsMSwwLDBdXX1tZXNoTG9hZGVyKHQpe2xldCBlPXQuc3BsaXQoIlxuIiksaT1bXSxzPVtdO2UuZm9yRWFjaCgodD0+e2lmKHQuc3RhcnRzV2l0aCgidiAiKSl7bGV0IGU9dC5zcGxpdCgiICIpO2Uuc2hpZnQoKSxlPWUubWFwKCh0PT5wYXJzZUZsb2F0KHQpKSksaS5wdXNoKGUpfWlmKHQuc3RhcnRzV2l0aCgiZiAiKSl7bGV0IGU9dC5zcGxpdCgiICIpO2Uuc2hpZnQoKSxlPWUubWFwKCh0PT5wYXJzZUZsb2F0KHQpKSkscy5wdXNoKGUpfX0pKTtsZXQgbz17eDp7YTppLm1hcCgodD0+dFswXSkpLG1pbjpudWxsLG1heDpudWxsLGRlbHRhOm51bGx9LHk6e2E6aS5tYXAoKHQ9PnRbMV0pKSxtaW46bnVsbCxtYXg6bnVsbCxkZWx0YTpudWxsfSx6OnthOmkubWFwKCh0PT50WzJdKSksbWluOm51bGwsbWF4Om51bGwsZGVsdGE6bnVsbH19LG49W1sieCIsInkiLCJ6Il0sWyJtaW4iLCJtYXgiXV07blswXS5mb3JFYWNoKCh0PT57blsxXS5mb3JFYWNoKChlPT57c3dpdGNoKGUpe2Nhc2UibWluIjpvW3RdW2VdPU1hdGgubWluKC4uLm9bdF0uYSk7YnJlYWs7Y2FzZSJtYXgiOm9bdF1bZV09TWF0aC5tYXgoLi4ub1t0XS5hKX19KSksb1t0XS5kZWx0YT1vW3RdLm1heC1vW3RdLm1pbn0pKTtmb3IobGV0IHQ9MDt0PGkubGVuZ3RoO3QrKylpW3RdWzBdPShpW3RdWzBdLW8ueC5taW4pL28ueC5kZWx0YSxpW3RdWzFdPShpW3RdWzFdLW8ueS5taW4pL28ueS5kZWx0YSxpW3RdWzJdPShpW3RdWzJdLW8uei5taW4pL28uei5kZWx0YTtyZXR1cm4gcy5tYXAoKHQ9PltpW3RbMF0tMV1bMF0saVt0WzBdLTFdWzFdLGlbdFswXS0xXVsyXSxpW3RbMV0tMV1bMF0saVt0WzFdLTFdWzFdLGlbdFsxXS0xXVsyXSxpW3RbMl0tMV1bMF0saVt0WzJdLTFdWzFdLGlbdFsyXS0xXVsyXV0pKX1vblVzZXJDcmVhdGUoe3NjcmVlbkhlaWdodDp0LHNjcmVlbldpZHRoOmV9KXtyZXR1cm4obmV3IE1hdHJpeCkubWFrZVByb2plY3Rpb24oOTAsdC9lLC4xLDFlMyl9b25Vc2VyVXBkYXRlKHttYXRQcm9qOnQsTWVzaEN1YmU6ZSxmRWxhcHNlZFRpbWU6aSxzY3JlZW5XaWR0aDpzLHNjcmVlbkhlaWdodDpvfSl7Y29uc3Qgbj1uZXcgTWF0cml4LGE9bmV3IFZlY3RvcixyPWEubXVsKHRoaXMudkxvb2tEaXIsOCppKTtzd2l0Y2godGhpcy5jb25maWcuY2FtZXJhLmxvb2tfYXQuZGlzdGFuY2Upe2Nhc2UiZm9yd2FyZCI6dGhpcy52Q2FtZXJhPWEuYWRkKHRoaXMudkNhbWVyYSxyKSx0aGlzLmNvbmZpZy5jYW1lcmEubG9va19hdC5kaXN0YW5jZT0iIjticmVhaztjYXNlImJhY2t3YXJkIjp0aGlzLnZDYW1lcmE9YS5zdWIodGhpcy52Q2FtZXJhLHIpLHRoaXMuY29uZmlnLmNhbWVyYS5sb29rX2F0LmRpc3RhbmNlPSIifWNvbnN0IGM9MSppLG09bi5tYWtlUm90YXRpb25aKC41KmMpLGw9bi5tYWtlUm90YXRpb25YKGMpO3RoaXMudkNhbWVyYS54PXRoaXMuY29uZmlnLmNhbWVyYS5wb3NpdGlvbi54LHRoaXMudkNhbWVyYS55PXRoaXMuY29uZmlnLmNhbWVyYS5wb3NpdGlvbi55O2NvbnN0IGg9bi5tYWtlVHJhbnNsYXRpb24oMCwwLDUpO2xldCBwPW5ldyBNYXQ0eDQ7cD1uLm1ha2VJZGVudGl0eSgpLHA9bi5tdWx0aXBseU1hdHJpeChtLGwpLHA9bi5tdWx0aXBseU1hdHJpeChwLGgpO2NvbnN0IGQ9bmV3IFZlY3RvcjMoMCwxLDApO2xldCB1PW5ldyBWZWN0b3IzKDAsMCwxKTtjb25zdCBmPW4ubWFrZVJvdGF0aW9uWSh0aGlzLmNvbmZpZy5jYW1lcmEubG9va19hdC55YXcpO3RoaXMudkxvb2tEaXI9bi5tdWx0aXBseVZlY3RvcihmLHUpLHU9YS5hZGQodGhpcy52Q2FtZXJhLHRoaXMudkxvb2tEaXIpO2NvbnN0IHc9bi5wb2ludEF0KHRoaXMudkNhbWVyYSx1LGQpLGc9bi5xdWlja0ludmVyc2Uodyk7bGV0IHk9W107cmV0dXJuIGUudHJpcy5mb3JFYWNoKChlPT57Y29uc3QgaT1uZXcgVHJpYW5nbGUscj1uZXcgVHJpYW5nbGUsYz1uZXcgVHJpYW5nbGU7ci5wMD1uLm11bHRpcGx5VmVjdG9yKHAsZS5wMCksci5wMT1uLm11bHRpcGx5VmVjdG9yKHAsZS5wMSksci5wMj1uLm11bHRpcGx5VmVjdG9yKHAsZS5wMik7Y29uc3QgbT1hLnN1YihyLnAxLHIucDApLGw9YS5zdWIoci5wMixyLnAwKTtsZXQgaD1hLmNyb3NzUHJvZHVjdChtLGwpO2g9YS5ub3JtYWxpc2UoaCk7Y29uc3QgZD1hLnN1YihyLnAwLHRoaXMudkNhbWVyYSk7aWYoYS5kb3RQcm9kdWN0KGgsZCk8MCl7bGV0IGU9bmV3IFZlY3RvcjMoMCwxLC0xKTtlPWEubm9ybWFsaXNlKGUpO2NvbnN0IG09TWF0aC5tYXgoLjEsYS5kb3RQcm9kdWN0KGUsaCkpO3IuY29sb3I9TWF0aC5mbG9vcihtKnRoaXMuY29uZmlnLnN0eWxlLnNoYWRvdy5yYW5nZSksYy5wMD1uLm11bHRpcGx5VmVjdG9yKGcsci5wMCksYy5wMT1uLm11bHRpcGx5VmVjdG9yKGcsci5wMSksYy5wMj1uLm11bHRpcGx5VmVjdG9yKGcsci5wMiksYy5jb2xvcj1yLmNvbG9yO2NvbnN0IGw9bmV3IFZlY3RvcjMoMCwwLC4xKSxwPW5ldyBWZWN0b3IzKDAsMCwxKSxkPW5ldyBBcnJheSgyKS5maWxsKG5ldyBUcmlhbmdsZSksdT1UcmlhbmdsZV9DbGlwQWdhaW5zdFBsYW5lKGwscCxjLGRbMF0sZFsxXSk7Zm9yKGxldCB0PTA7dDx1O3QrKyk7aS5wMD1uLm11bHRpcGx5VmVjdG9yKHQsYy5wMCksaS5wMT1uLm11bHRpcGx5VmVjdG9yKHQsYy5wMSksaS5wMj1uLm11bHRpcGx5VmVjdG9yKHQsYy5wMiksaS5jb2xvcj1yLmNvbG9yLGkucDA9YS5kaXYoaS5wMCxpLnAwLncpLGkucDE9YS5kaXYoaS5wMSxpLnAxLncpLGkucDI9YS5kaXYoaS5wMixpLnAyLncpO2NvbnN0IGY9bmV3IFZlY3RvcjMoMSwxLDApO2kucDA9YS5hZGQoaS5wMCxmKSxpLnAxPWEuYWRkKGkucDEsZiksaS5wMj1hLmFkZChpLnAyLGYpLGkucDAueCo9dGhpcy5jb25maWcubWVzaC5zY2FsZSpzLGkucDAueSo9dGhpcy5jb25maWcubWVzaC5zY2FsZSpvLGkucDEueCo9dGhpcy5jb25maWcubWVzaC5zY2FsZSpzLGkucDEueSo9dGhpcy5jb25maWcubWVzaC5zY2FsZSpvLGkucDIueCo9dGhpcy5jb25maWcubWVzaC5zY2FsZSpzLGkucDIueSo9dGhpcy5jb25maWcubWVzaC5zY2FsZSpvO2xldCB3PVtbInAwIiwicDEiLCJwMiJdLFsieCIsInkiLCJ6Il1dO3dbMF0uZm9yRWFjaCgodD0+e3dbMV0uZm9yRWFjaCgoZT0+e2lbdF1bZV09TnVtYmVyLnBhcnNlRmxvYXQoaVt0XVtlXSkudG9GaXhlZCh0aGlzLmNvbmZpZy5tZXNoLmZsb2F0X3NpemUpfSkpfSkpLHkucHVzaCh0aGlzLmRyYXdUcmlhbmdsZVNWRyhpKSl9fSkpLHl9ZHJhd1RyaWFuZ2xlU1ZHKHQpe3JldHVybiB0aGlzLmN0eC5iZWdpblBhdGgoKSx0aGlzLmN0eC5tb3ZlVG8odC5wMC54LHQucDAueSksdGhpcy5jdHgubGluZVRvKHQucDEueCx0LnAxLnkpLHRoaXMuY3R4LmxpbmVUbyh0LnAyLngsdC5wMi55KSx0aGlzLmN0eC5saW5lVG8odC5wMC54LHQucDAueSksdGhpcy5jdHguY2xvc2VQYXRoKCksdGhpcy5jdHguZmlsbFN0eWxlPWByZ2IoJHt0LmNvbG9yfSwke3QuY29sb3J9LCR7dC5jb2xvcn0pYCx0aGlzLmN0eC5zdHJva2UoKSx0aGlzLmN0eC5maWxsKCksYDxwb2x5Z29uIHBvaW50cz0iJHt0LnAwLnh9LCR7dC5wMC55fSAke3QucDEueH0sJHt0LnAxLnl9ICR7dC5wMi54fSwke3QucDIueX0iIHN0cm9rZT0iJHt0aGlzLmNvbmZpZy5zdHlsZS5zdHJva2UuY29sb3J9IiBmaWxsPSJyZ2IoJHt0LmNvbG9yfSwgJHt0LmNvbG9yfSwgJHt0LmNvbG9yfSkiIHN0cm9rZS13aWR0aD0iJHt0aGlzLmNvbmZpZy5zdHlsZS5zdHJva2Uud2lkdGh9IlxuICAgICAgICBzdHJva2UtbGluZWNhcD0iYnV0dCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9InRyaWFuZ2xlIiAvPmB9cmVuZGVyU2NyZWVuKHttYXRQcm9qOnQsbWVzaDplfSl7dGhpcy5lbGFwc2VkVGltZSs9dGhpcy5jb25maWcucmVuZGVyLmVsYXBzZV90aW1lLHRoaXMuY3R4LmZpbGxTdHlsZT10aGlzLmNvbmZpZy5zdHlsZS5jb2xvci5iYWNrZ3JvdW5kLHRoaXMuY3R4LmZpbGxSZWN0KDAsMCx0aGlzLmNvbmZpZy5jYW52YXMud2lkdGgsdGhpcy5jb25maWcuY2FudmFzLmhlaWdodCk7bGV0IGk9dGhpcy5vblVzZXJVcGRhdGUoe21hdFByb2o6dCxNZXNoQ3ViZTplLGZFbGFwc2VkVGltZTp0aGlzLmVsYXBzZWRUaW1lLHNjcmVlbldpZHRoOnRoaXMuY29uZmlnLmNhbnZhcy53aWR0aCxzY3JlZW5IZWlnaHQ6dGhpcy5jb25maWcuY2FudmFzLmhlaWdodH0pO3RoaXMuc3ZnLmlubmVySFRNTD1pLmpvaW4oIlxuIil9YXN5bmMgaW5pdFJlbmRlcigpe2xldCB0PW51bGw7aWYodGhpcy5jb25maWcubWVzaC5sb2FkX2Zyb21fZmlsZSl7Y29uc3QgZT1hd2FpdCBmZXRjaCh0aGlzLmNvbmZpZy5tZXNoLmZpbGUpLGk9YXdhaXQgZS50ZXh0KCk7dD10aGlzLm1lc2hMb2FkZXIoaSl9ZWxzZSB0PXRoaXMubWVzaEN1YmUoKTtjb25zdCBlPW5ldyBNZXNoKHQpLGk9dGhpcy5vblVzZXJDcmVhdGUoe3NjcmVlbkhlaWdodDp0aGlzLmNvbmZpZy5jYW52YXMuaGVpZ2h0LHNjcmVlbldpZHRoOnRoaXMuY29uZmlnLmNhbnZhcy53aWR0aH0pO2lmKHRoaXMucmVuZGVyU2NyZWVuKHttYXRQcm9qOmksbWVzaDplfSksdGhpcy5jb25maWcucmVuZGVyLmxvb3Ape3dpbmRvdy5zZXRJbnRlcnZhbCgoKCk9Pnt0aGlzLnJlbmRlclNjcmVlbih7bWF0UHJvajppLG1lc2g6ZX0pfSksdGhpcy5jb25maWcucmVuZGVyLmFuaW1hdGUpfX1hc3luYyBzdGFydCgpe3RoaXMuaW5pdENhbWVyYSgpLHRoaXMuaW5pdERvbSgpLHRoaXMuaW5pdEV2ZW50TGlzdGVuZXIoKSxhd2FpdCB0aGlzLmluaXRSZW5kZXIoKX19O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLChhc3luYyB0PT57Y29uc3QgZT1uZXcgUmVuZGVyRW5naW5lO2F3YWl0IGUuc3RhcnQoKX0pKTs8L3NjcmlwdD4KICAgIDwvYm9keT4KPC9odG1sPgo=
Bug reports and pull requests are welcome on GitHub at https://github.com/a6b8/ethereum-read-functions. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.
Why not use an existing Renderengine? First of all, it´s fun do it by my own! Second it make a lot of sense to think about every line of code for the new purpose of on-chain svg.
Why do you start with javascript? Well, for development i need a template for comparison anyway. Plus a web interface is the perfect fit for this type of project.
But solidity have no floating numbers. Yes! This should be a good starting point
What are the reduction strategies besides traditional 3D Renderengines have?
- CSG Operations for recursivly merging polygons together.
- Reduce faces by grouping into grey areas.
- ...
How did you start? This project is heavily inspired by LoneCoder´s Code-It-Yourself! 3D Graphics Engine Youtube Series. Which inspired me to build my own SVG version.
The module is available as open source under the terms of the MIT License.
Everyone interacting in the Statosio project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.
Please ⭐️ star this Project, every ⭐️ star makes us very happy!
Visit: https://gitcoin.co/grants/4986/svg-3d-renderengine-for-nfts