Este repositório contém uma coleção de componentes Python estruturados e otimizados para jogos desenvolvidos na Range Engine ou UPBGE (Blender Game Engine).
Os componentes inclusos são focados em performance, automação de posicionamento de decalques e gerenciamento inteligente de iluminação em tempo real.
- Optimized Light Manager (
optimized_lights.py): Sistema de LOD (Level of Detail) e pool de luzes dinâmicas por proximidade para otimizar a renderização de iluminação urbana ou de pistas. - Decal Projector (
decal_projector.py): Projetor geométrico instantâneo para projetar e alinhar decalques (como marcas de frenagem, óleo ou placas) à inclinação e normal de superfícies e pistas.
Gerenciador projetado para resolver a perda de performance decorrente do uso de múltiplas luzes dinâmicas (como postes de luz em uma pista ou cidade). Em vez de manter dezenas de fontes de luz ativas ao mesmo tempo, ele mantém apenas um pool pequeno de luzes em tempo real que "seguem" o jogador, teleportando-se suavemente entre os postes próximos com transições de fade-in e fade-out.
| Campo | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| Player Name | String |
"Player" |
Nome do objeto que representa o jogador na cena (centro do cálculo de LOD). |
| Light Prefix | String |
"MoveLamp" |
Prefixo do nome dos objetos de luz dinâmica real no pool (ex: MoveLamp.001). |
| Empty Prefix | String |
"Empty" |
Prefixo do nome dos objetos vazios (Empties) posicionados nos postes de iluminação. |
| Enable Debug Mode | Boolean |
False |
Desenha linhas de depuração 3D ligando os postes ao jogador e imprime logs no console. |
| Update Interval (frames) | Integer |
6 |
Frequência de quadros para checar a distância do jogador (reduz o uso de CPU). |
| Distance Threshold (meters) | Float |
2.0 |
Distância mínima que o jogador deve andar para recalcular as luzes ativas. |
| Max Light Distance (meters) | Float |
60.0 |
Distância máxima de corte para ativar uma luz dinâmica real no poste. |
| Fade Speed | Float |
0.08 |
Velocidade de transição fade das intensidades e cores durante o teleporte. |
- Luzes Dinâmicas (Pool): Crie algumas luzes de tempo real (tipo Point ou Spot, ex: 3 a 5 luzes). Nomeie-as com o prefixo (ex:
MoveLamp.001,MoveLamp.002). Elas serão movidas pelo script automaticamente. - Postes (Empties): Coloque objetos vazios (Empties) na posição de cada poste de luz. Nomeie-os com o prefixo (ex:
Empty.Poste.001,Empty.Poste.002).- Cores Individuais: Mude a cor do Empty (ou use propriedades de jogo
r,g,b) para que a luz dinâmica assuma essa cor ao se aproximar. - Efeito Flicker (Mau Contato): Adicione uma propriedade booleana
flicker = Trueou coloqueflickerno nome do Empty para fazer o poste cintilar.
- Cores Individuais: Mude a cor do Empty (ou use propriedades de jogo
- Gerenciador: Crie um Empty central na cena chamado
LightManager, anexe o scriptoptimized_lights.pycomo Componente e preencha os parâmetros.
Componente utilitário que automatiza o posicionamento geométrico de decalques sobre superfícies irregulares. Ele dispara um raio no eixo local -Z do decalque, reposiciona o objeto sobre o ponto de colisão com um offset ajustável (para evitar Z-fighting) e o alinha perfeitamente com a inclinação e a normal da superfície.
| Campo | Tipo | Valor Padrão | Descrição |
|---|---|---|---|
| Normal Offset (meters) | Float |
0.002 |
Pequeno deslocamento na direção normal para evitar cintilação/sobreposição visual. |
| Max Ray Distance | Float |
5.0 |
Alcance máximo do raio disparado para baixo para detectar o solo. |
| Align to Surface Normal | Boolean |
True |
Rotaciona o decalque para alinhar seu eixo Z local com a inclinação exata da pista. |
| Parent to Hit Object | Boolean |
True |
Torna o decalque filho da superfície atingida (essencial se a pista/plataforma se mover). |
- Crie uma malha plana para representar o decalque (ex: marca de pneu, sujeira ou sinalização na pista).
- Posicione o plano logo acima da pista, garantindo que o seu eixo local -Z esteja apontando para baixo (direção da projeção).
- Anexe o script
decal_projector.pycomo um Python Component neste objeto. - Ao iniciar o jogo, o script executará a projeção instantaneamente na primeira inicialização e liberará o loop de processamento (
updatelivre), garantindo custo zero de CPU durante o gameplay.
- LOD Inteligente para Luzes: Elimina o gargalo de draw calls gerado por iluminação dinâmica múltipla na BGE/Range Engine, simulando centenas de pontos de luz usando apenas de 3 a 5 luzes reais.
- Transições Sem Pops: As lâmpadas apagam e acendem gradativamente durante o teleporte de proximidade, impedindo transições bruscas visíveis ao jogador.
- Projeção Estática Eficiente: O decalque calcula sua posição exata no frame inicial (
start) e cessa qualquer processamento subsequente, evitando chamadas repetitivas de raycast a cada frame. - Amortização de CPU: O gerenciador de luzes realiza checagens temporizadas (Time-slicing) com base no deslocamento do jogador, evitando gargalos de lógica.