top of page
  • Join our Discord!
  • Join our Kickstarter!

elevando o nível da engine do sanctuary

Olá pessoas da internet! Aqui é o seu perigosamente-belo desenvolvedor DOTS trazendo um novo diário de desenvolvimento.YAAAY! Eu posso escutar os aplausos até do fundo da engine do Sanctuary. Hoje no mundo mágico do ruído branco e telas azuis, eu estarei apresentando o MVP e meu refém das últimas semanas (e dos anos de pesquisa em computação gráfica); Você pode adivinhar quem é? Sim, é a faixa sensacional que continua popular - verdadeiramente uma história digna de não apenas um devlog, mas O devlog. SIM! é o RAY!


Agora, eu tenho certeza que um de vocês bobinhos está imaginando o que isto tem a ver com o Sanctuary. "Não acredito, FoneE, você implementou ray tracing" disse alguém? Para o qual eu respondo "Não, meu caro alguém, eu não fiz isso." Mas o que implementei é sobre detecção de coisas físicas e hoje falaremos sobre o essencial raio e seu grande papel no Sanctuary.

Agora, antes de começarmos a dissecar um raio infinitamente, é importante notar que, apesar que eu adoraria explicar tudo para meus pequenos minions, o mundo é um lugar muito, muito cruel. Então, ao invés de explicar as origens por trás do raio, aqui está um grande artigo que vai diretamente ao ponto: "What is a Ray? | Virtual Nerd" (em Inglês). É claro que você é um dos meus supremos minions, e como tal, você não precisa de um tutorial! Primeiramente, explicaremos a "gravidade dos raios". Sanctuary se foca em ter um ambiente de física simulada. O que isso quer dizer? que tudo é simulado, bobinho! Projéteis, unidades, e até o mundo em que vivemos é uma grande simulação! Isso é ótimo porque permite algumas interações muito interessantes dentro do mundo do jogo, que podem ser muito cruciais e divertidas para um jogo de estratégia em tempo real. Apenas imagine decolar com um bombardeiro só para ele espatifar-se na sua cabeça. Ah, a ironia. É claro, a desvantagem de fazer um mundo tão dinâmico é que devemos resolver um dos maiores problemas da vida - O quão perto eu estou daquele tanque!

"Mas espere,"Alguém grita, " nós temos muitas maneiras de resolver isso, como a fórmula de distância!" Alguém, pare de me interromper! Você deveria ter morrido no primeiro parágrafo. Pelo ambiente do Sanctuary ser simulado, representar coisas como pontos não é mais viável. Apenas pegue esse ponto como exemplo. Cena!


Esta arte maravilhosa foi desenhada por owlieart! Por favor, mostre seu suporte pela ajuda a levar este devlog a um nível totalmente diferente.

Entre, Big Bertha - um gigante T4 que é a encarnação física de todos os jogos que você perdeu. O volume dela humilharia a lua. Agora, entrem: T1 Mosquito, um dia ele foi relevante, porém, desde a marca dos 25 minutos de partida, ele sentiu o "peso da insignificância". Rally points já esquecido resultam em uma eterna cruzada de... cair em pontos de defesa :( Você consegue, meu pequeno SPAM!

Lembre-se de mostrar seu apoio para owlieart!


Se formos representar a distância entre essas duas unidades, rapidamente perceberíamos que pontos não conseguem representar essa distância. De fato, representar unidades que contém volume (i.e colisores) -- especialmente com grandes volumes e formatos únicos -- usando pontos realmente destruiria o realismo que nos esforçamos para alcançar.



Eu mencionei que owlieart é minha irmã mais velha? Para mais registros familiares, siga owlieart no instagram!


Então, como esse problema é resolvido usando raios? Você provavelmente já descobriu, mas: raios nos permitem calcular a distância entre diferentes volumes. Além disso, a versatilidade do raio significa que nós podemos cruzar uma infinidade de formas (tanto que é o porque nossos escudos são capazes de tomar a forma de um elipsoide!) com grande acurácia e eficiência.


Uma coisa incrível que vem de usarmos raios como ferramenta de interseções é que a distância dessas interseções é calculada sem a necessidade de usar operações custosas. Ademais, o fato que conseguimos retornar a distância real significa que que podemos pular procedimentos que normalmente teríamos que fazer. (como a fórmula de distância do raio de origem até o ponto de acerto do raio) Pular a necessidade de calcular a distância significa menos cálculos e menos uso de hardware. - Alguém

Andar pela borda do raio é o caminho perfeito que só dá benefícios. Espere... Quem disse isso? Apesar de podermos resumir as funcionalidades do nosso Raycasting em quatro pontos, esses quatro pontos abrangem as bases fundamentais para criar a maioria do que precisamos para um mundo simulado no Sanctuary:

  • Nos permite medir precisamente a distância entre objetos que tenham volume.

  • Nos permite detectar colisões entre objetos e projéteis.

  • Nos permite consultar se os colisores estão obstruídos. (i.e. impedir dano de ataque em área de atravessar escudos/objetos e atingir unidades ocultas.)

  • Nos permite usar raios no mundo! (Duuuh!)

Então, como foi a jornada? Você passou o teste de linhas verticais? "não, não rolou..." Afinal, o que sequer significa isso?!? Enfim, espero que no futuro eu possa postar mais desses diários de desenvolvimento™ mas eu preciso do seu feedback! Qual tópico você deseja ver sendo abordado na próxima vez? Você gostaria que eu entrasse em mais detalhes, talvez até mesmo usar alguns códigos de verdade, ou desse jeito está bom? Talvez você tenha recentemente comido brócolis e precisa de um lugar pra expressar o seu desgosto (você tem minhas condolências). Sinta-se à vontade para ir ao Discord do Sanctuary e mandar uma mensagem para FoneE#1533.

Enfim, esse é FoneEOficial, deslogando.

P.S Para os desenvolvedores por aí, que estão ainda mais curiosos sobre o funcionamento interno do sistema de Raycasting - como somos capazes disso e aquilo - eu deixarei uns links excelentes para alguns dos muito importante recursos para desenvolver um você mesmo! E mesmo assim, se precisar de MAIS, sinta-se à vontade para me mandar mensagem no Discord do Sanctuary. Meu nickname é FoneE#1533.

Links úteis para qualquer um tentando aprender o sistema de Raycasting: Uma grande introdução para um algoritmo rápido que particiona seu mundo para o Raycasting. Super Fast Ray Casting in Tiled Worlds using DDA - YouTube (em inglês)

Esse link é um artigo onde é implementado uma versão 3D (e também algumas otimizações) do algorítmo DDA acima. (PDF) Efficient implementation of the 3D-DDA ray traversal algorithm on GPU and its application in radiation dose calculation (researchgate.net)


Um artigo extremamente importante que fala sobre interseções de raios em uma infinidade de volumes. Eu louvo essa página. Muito obrigado, Inigo. Inigo Quilez :: fractals, computer graphics, mathematics, shaders, demoscene and more (iquilezles.org)

10 views0 comments
bottom of page