É bem comum que os espelhos dos ônibus no OMSI apresentem uma distorção estranha, como se o reflexo estivesse “espremido” horizontalmente.Eu sempre soube que esticar a ilha UV do espelho de modo a cobrir toda a textura (algo que eu vejo em praticamente todos os ônibus) não é o ideal, porque fica tudo bem distorcido, mas eu achava que simplesmente usando a opção Unwrap e centralizando a ilha na textura era o certo. Calha que não é. É bem melhor que esticar a ilha pra cobrir toda a dimensão horizontal da textura, mas ainda assim fica distorcido. Bem menos, mas fica.

Fiz o seguinte: criei um objeto quadrado virado pra frente e coloquei do lado de fora do ônibus, perto da carroceria. No espelho esse objeto aparecia retangular, com a largura visivelmente menor que a altura.

Fui mexendo no mapeamento UV do espelho pra achar a forma de fazer o objeto quadrado aparecer quadrado no espelho. Constatei que se depois do unwrap a ilha fosse reduzida no eixo X a uma proporção de cerca de 1.7, o quadrado aparecia quadrado.

Evidentemente não teria por que esse número ser arbitrário. Tinha que ter um motivo pra isso. E esse número, 1.7, não é totalmente estranho pra quem lida com proporções em telas de computador com alguma frequência. Calha que a maioria dos monitores hoje em dia (inclusive os dois que eu uso) são widescreen, em uma proporção de 16:9. Isso quer dizer que dividir a largura por 16 dá o mesmo resultado que dividir a largura por 9 (e que (largura / 16) × 9 = altura). Por exemplo, um dos meus monitores é Full HD, ou seja, tem uma resolução de 1920×1080. 1920 / 16 = 120, e 120 × 9 = 1080. O outro monitor é 1600×900.

Isso significa que a proporção entre largura e altura é a mesma, independente da resolução. E num monitor que respeita a proporção 16:9, esse valor é 16 / 9.

16 / 9 = 1.77777…
1920 / 1080 = 1.77777…
1600 / 900 = 1.77777…

E se você pegar uma trena ou uma régua e medir o tamanho da tela você vai constatar que dividindo a largura física pela altura física também vai dar algo próximo desse valor.

Não tem por que isso ser coincidência. O que dá pra deduzir disso é que a textura que o OMSI renderiza pra usar como reflexion0, reflexion1, e etc, é renderizada na proporção da tela. Enquanto usamos uma reflexion0 de 256×256 (1:1), ela é gerada pelo OMSI na proporção 1.77777…:1. Na configuração padrão do OMSI para o tamanho de texturas de reflexo (512) isso seria 512 por (512 / 1.77777…), ou seja, 512×288.

Aí alguém poderia pensar que se o mapeamento UV é feito numa textura de 256×256, ele pegaria só uma pequena parte da textura real de 512×288, mas não. Os vértices UV são armazenados como um número em ponto flutuante especificando uma fração da dimensão total textura. Por exemplo, um vértice UV em 0.0,0.0 estaria no canto superior direito da textura (pixel coordinates 0,0), enquanto que um vértice UV em 1.0,1.0 estaria no canto inferior direito, independente do tamanho real da textura (se a textura for 256×256, estaria em 255,255; em uma textura 512×288 estaria em 511,287. Observação: em alguns casos (por exemplo no Blender) a referência do eixo Y do mapa UV é invertida (0,0 é o canto inferior direito). Isso não faz diferença no contexto deste post.

Note nos valores acima que se você faz uma ilha UV quadrada em uma textura quadrada, se o jogo renderizar usando uma textura retangular essa ilha não é mais quadrada, e esse é o centro do problema no que tange aos espelhos.

Tratar o mapeamento UV dessa forma tem suas vantagens. Por exemplo, se você faz o mapeamento UV de um objeto em uma textura de 1024×1024 e depois, pra economizar espaço em disco e memória de vídeo, redimensiona essa textura pra ficar em 256×128 (por exemplo se é um objeto que é sempre visto de longe e portanto a perda dos detalhes não seria tão perceptível), o mapa UV ainda vai estar correto. Se você tinha um quadrado na textura original, ao redimensionar ele passa a ser um retângulo cuja altura seria metade da largura na imagem da textura, mas, ao renderizar, o mapa UV seria espremido proporcionalmente, de forma que esse elemento que era quadrado na textura original ao renderizar continuaria aparecendo quadrado, mesmo que na textura utilizada para a renderização ele esteja retangular.

Na verdade a engine gráfica ao carregar um mapa UV nem sabe qual era o tamanho original da textura. Ela só sabe que um vértice UV em 0.5,0.5 por exemplo deve ser renderizado exatamente no meio da textura associada, independente de qual seja o tamanho dela.

Só que a textura de reflexo não é “espremida” pra ficar com 512×288; esse é o tamanho real dela. Um objeto quadrado na área de visão do espelho seria quadrado nela. Aí ao renderizar o objeto do espelho o mapa UV que originalmente era quadrado é transformado de forma a ser aplicado em uma textura retangular, e o resultado é o objeto quadrado aparecendo retangular.

Isso pode ser resolvido de duas formas: ou usando uma textura de fato retangular, aí um simples Unwrap gera a ilha no tamanho e na proporção correta, ou usando uma textura quadrada e espremendo ela no eixo X pela diferença entre as proporções da textura mapeada e a textura real gerada pelo OMSI. A razão de redimensionamento nesse caso seria o inverso do quanto ela seria espremida ao renderizar (ou seja, 1 / 1.77777…, o que dá 0.5625). Dá pra fazer isso no Blender selecionando os UVs e teclando S X e digitando 0.5625.

Eu acho mais fácil trabalhar com a textura no tamanho correto em vez de ter que fazer essa distorção pra poder mapear corretamente sobre uma textura quadrada. O processo que eu uso é o seguinte:

Primeiro eu preparo as texturas, para que tenham o tamanho correto mas sem distorcer a imagem (se eu já tiver feito isso em outro ônibus, eu só copio as texturas preparadas dele):

1. Redimensiono o reflexionX.bmp de 256×256 para 512×512 (no Fireworks seria a opção “Image size”). Isso não é estritamente necessário visto que não importa o tamanho real da textura desde que a proporção entre largura e altura esteja correta, mas ainda assim prefiro fazer dessa forma.
2. Corto o excesso do reflexionX.bmp para que fique com 512×288 (no Fireworks seria a opção “Canvas size”).

Uma vez preparadas as texturas, é hora de mapear:

1. Se o objeto já estava aberto no Blender, eu vou na aba Texture e atualizo a textura, ou simplesmente abro o arquivo novamente, para que o Blender perceba que a textura foi alterada.
2. No Blender, em modo de edição, eu seleciono todas as faces que compõem o vidro do espelho.
3. Em modo de edição de UVs, teclo U (menu UV mapping) → Unrwap.
4. No mapa UV, eu teclo A uma ou duas vezes para selecionar tudo.
5. No mapa UV, vou no menu UVs → Mirror → X axis para que a imagem não apareca lateralmente invertida no OMSI.
6a. Se for um espelho vertical (espelhos externos), coloco 256 na coordenada X da ilha UV (metade da largura da textura). Isso centraliza a textura no eixo X.
6b. Se for um espelho vertical (espelhos internos), coloco 144 na coordenada Y da ilha UV (metade da altura da textura). Isso deve mover a ilha no eixo Y para o centro da textura.

Aí é só exportar pro OMSI e ajustar a câmera no .bus.

Infelizmente, um efeito colateral disso é que o reflexo no espelho aparece mais pixelado, já que a textura gerada pelo OMSI é pequena e para o reflexo aparecer com a proporção correta uma parte significativa dela não é usada (e a opção de tamanho das texturas de reflexo nas opções não funciona). Ainda assim, eu prefiro dessa forma. Pra mim, olhar no espelho e ver tudo “esticado” prejudica a imersão no jogo.

Clique para ver comentários ou comentar...


[MOD] Versão São Paulo by David Santos para a Coleção de Mascarello do RKC

Incluindo todas as empresas/[ex-]cooperativas atuais.

Versões:

  • Branca (empresas)
  • Cinza (empresas e cooperativas)
  • Cooperativa Branca (só cooperativas, exceto articulados)
  • Cooperativa Branca/Cinza (só cooperativas, exceto articulados)

Skins Mascarello 14

(leia na íntegra…)

Clique para ver comentários ou comentar...


Passei mais de um ano usando o clip infravermelho para controlar a câmera no OMSI. É um método que funciona bem, mas tem suas limitações. Por exemplo, é mais um cabo pra ficar se enroscando quando se joga com volante, e só funciona se o ambiente estiver bem escuro, já que qualquer reflexo pode confundir o sistema.

Um método mais simples e barato, e que não tem essas limitações é a detecção da posição da cabeça por meio do aruco tracker. Em vez de usar um clip infravermelho, o aruco usa um marcador de papel. Basta imprimir e fixar na cabeça (por exemplo prendendo o marcador no headset ou em um boné). A câmera detecta a posição do marcador e com isso a posição da cabeça. Pra mim esse método funciona tão bem quanto o clip infravermelho mas com mais flexibilidade. É necessário que o ambiente possua luz suficiente para que a câmera consiga “ver” o marcador, mas pelo menos com a webcam que eu uso (uma Logitech C270) mesmo à noite com as luzes apagadas eu consigo jogar só com a luz vinda do monitor.

No vídeo abaixo eu mostro esse método em funcionamento e explico como instalar e configurar o programa. Na descrição do vídeo tem os links do programa e da imagem do marcador.

Dicas:

  • Se a imagem capturada pela câmera estiver muito escura, fazendo com que o marcador não seja detectado direito, clique no ícone do martelo ao lado da opção “Input” onde a opção “aruco — paper marker tracker” está selecionada, e na janela que abrir (a mesma que se usa para fazer a calibração conforme explicado no vídeo) clique em “Camera Settings”. Isso vai abrir a janela de configurações nativa da câmera. O ideal é desmarcar qualquer opção que esteja como “Auto” e definir as configurações manualmente. As opções que afetam a claridade da imagem (quais estarão disponíveis depende da câmera) são, em ordem de importância, “Exposure”, “Gain”, “Gamma”, brilho/“Brightness”, e contraste/“Contrast”. Note que a opção que é mais eficiente pra clarear a imagem se estiver muito escura é a “exposure” (que nem todas as câmeras oferecem), mas aumentar demais a “exposure” faz com que o FPS da câmera diminua, o que faz com que haja mais lag na movimentação da câmera no jogo.
  • Para evitar “pulos” ou que o movimento fique “torto”:
    • Certifique-se que a câmera está posicionada diretamente na sua frente (acima ou abaixo do monitor). O movimento vai ficar meio estranho se a câmera estiver posicionada fora do centro (ao lado do monitor, por exemplo).
    • Ajuste o marcador para que no quadro “Raw tracker data” do opentrack, quando você estiver olhando reto para a frente, o valor “Roll” esteja o mais próximo possível de zero e o valor “Pitch” esteja na faixa de 50 a 60 ou -50 a -60. Pode parecer estranho, o marcador ficar quase na horizontal em relação à câmera, mas isso ajuda o opentrack a detectar a posição de forma mais confiável. Essa informação eu só vi no site do opentrack depois que tinha feito o vídeo, por isso não mencionei isso nele.
Clique para ver comentários ou comentar...


Em preparação para colocar o mapa São Miguel City no Guia de Mapas, fiz uma pequena correção no mapa. Em três trechos da linha 3459-10 as splines estavam invertidas. Isso fazia com que, pelo menos ao usar a opção de carregar o mapa inteiro ao iniciar (que eu uso), um dos ônibus AI da linha aparecesse em uma dessas splines na contramão e não conseguisse continuar, bloqueando a passagem dos subsequentes que acabavam formando uma fila atrás dele e ficando todos parados. Essa correção ajusta as splines e ajusta as rotas afetadas (3459-10 rota 1 e Reservado N301 Rota 3).

Clique aqui para baixar – São Miguel City patch v1.2 by David Santos

IMPORTANTE: Antes de instalar essa atualização, é necessário instalar:

  1. O mapa (obviamente).
  2. A atualização v1.1.
Clique para ver comentários ou comentar...


Fiz essas skins para o CAIO Millennium IV e CAIO Mondego II by R.Kmargo, usando como base o manual de identidade visual da SPTrans e fotos na Internet.

Clique aqui para baixar
Extraia na pasta do ônibus.

Fiz skins de todas as áreas (1 – Santa Brígida, 2 – Sambaíba, 3 – Consórcio Plus, 4 – Ambiental, 5 – Via Sul, 6 – Cidade Dutra, 7 – Campo Belo, e 8 – Gato Preto) para as quatro versões do ônibus: Millennium IV, Millennium IV articulado, Mondego II, e Mondego II articulado.

Importante:
Patch para os Ônibus:
Clique aqui para baixar

Nesses ônibus, o Símbolo Internacional de Acesso (o quadrado azul com o símbolo de cadeira de rodas) originalmente foi colocado como um objeto na carroceria. Infelizmente, ele não estava na posição e tamanho exigidos pela SPTrans. Por conta disso, coloquei o SIA na skin mesmo, e fiz um pequeno patch que o remove da carroceria. Sem esse patch, ao usar essas skins aparecem dois SIA, um de cada lado da porta (em alguns casos obstruindo parte do logo da Prefeitura), e dois na traseira, um parcialmente sobre o outro.

Nota: Ao instalar esse patch, skins que não possuem o SIA nas laterais e traseira do veículo (incluindo as que vêm com esses ônibus) ficarão sem o SIA. Se isso incomodar, basta abrir a skin num editor de imagens, copiar o SIA (que apesar de não aparecer nas laterais e traseira ainda está no mesmo arquivo pois ainda aparece no pára-brisa) e colar na posição correta nas laterais e na traseira.

20170611102501_1

Fiz uma live no YouTube enquanto fazia essas skins. Veja o vídeo abaixo. Note que no vídeo eu fiz apenas uma, visto que as outras seriam basicamente cópias, e que percebi a necessidade de fazer algumas mudanças depois que o vídeo estava concluído. Por conta disso as skins não ficaram exatamente como aparecem no vídeo.

Extras (não são necessários para usar as skins):
Base Editável: Baixar

Baixe apenas se for editar as skins ou adaptá-las para outros ônibus. Não extraia na pasta do OMSI. Abra com o Adobe Fireworks CS6 (se preferir usar o Photoshop, é só abrir no Fireworks e salvar como PSD). Postagem de modificações está liberada, desde que você não cobre pelas modificações, não use outras formas de ganhar dinheiro com elas (e.g. AdFly), e que ao postar você inclua um link para este post. A licença dessas skins é CC-BY-NC-SA 3.0 BR.

Mais Fotos:

(leia na íntegra…)

Clique para ver comentários ou comentar...


Fiz essas skins para o Marcopolo Torino 2014 by Felipe Wergan, usando como base o manual de identidade visual da BHTrans e fotos na Internet.

Peço desculpas de antemão porque não conheço nada do sistema de Belo Horizonte.

Versão Normal: Baixar
Extraia na pasta do ônibus.

*Novo* Versão Sem Prefixos (adic. 21/01/2017): Baixar
As mesmas skins da versão normal, mas sem o número do carro e o nome do consórcio. Você pode instalar só esta versão, sem a versão normal, se preferir, mas você pode instalar as duas versões sem problemas. Se instalar as duas versões, ao adicionar o ônibus no jogo você escolhe se quer usar a skin BH ou a BH Sem Prefixo.

Fiz as skins para quatro versões do ônibus: MB 3 portas, VW 3 portas, MB Padron (3 portas), e VW Padron (3 portas). Ou seja, não fiz para as versões de duas portas.

Extras (não são necessários para usar as skins):
Versão Editável: Baixar
Baixe apenas se for editar as skins ou adaptá-las para outros ônibus. Não extraia na pasta do OMSI. Abra com o Adobe Fireworks CS6 ou mais novo. Postagem de modificações está liberada, desde que você não cobre pelas modificações, não use outras formas de ganhar dinheiro com elas (e.g. AdFly), e que ao postar você inclua um link para este post. A licença dessas skins é CC-BY-NC-SA 3.0 BR.

Correção Painel do VW: Baixar
Extraia na pasta do ônibus. Corrige as luzes de freio de mão e campainha no painel.

20170114005821_1

Mais fotos:

(leia na íntegra…)

Clique para ver comentários ou comentar...


Fiz essas skins para o Marcopolo Torino 2014 by Felipe Wergan, usando como base o manual de identidade visual da SPTrans e fotos na Internet.

Tomei algumas liberdades porque até onde eu sei esse modelo não roda em São Paulo.

Clique aqui para baixar
Extraia na pasta do ônibus.

Fiz as skins para quatro versões do ônibus: MB 3 portas, VW 3 portas, MB Padron (3 portas), e VW Padron (3 portas). Ou seja, não fiz para as versões de duas portas.

Extras (não são necessários para usar as skins):
Versão Editável: Baixar

Baixe apenas se for editar as skins ou adaptá-las para outros ônibus. Não extraia na pasta do OMSI. Abra com o Adobe Fireworks CS6 ou mais novo. Postagem de modificações está liberada, desde que você não cobre pelas modificações, não use outras formas de ganhar dinheiro com elas (e.g. AdFly), e que ao postar você inclua um link para este post. A licença dessas skins é CC-BY-NC-SA 3.0 BR.

Correção Painel do VW: Baixar
Extraia na pasta do ônibus. Corrige as luzes de freio de mão e campainha no painel.

Skins Torino 1

Mais Fotos:

(leia na íntegra…)

Clique para ver comentários ou comentar...


Clique aqui para ver a parte 1, onde falo sobre mover a câmera no jogo movendo a cabeça e sobre usar face tracking (rastreamento do rosto) para detectar a posição da cabeça com uma webcam.

Neste post eu falo sobre detectar a posição da cabeça usando um método mais confiável: point tracking. Consiste em montar um clip com três LEDs infravermelhos e prendê-lo em um headset ou boné. O computador consegue detectar a posição da cabeça com base na posição desses LEDs de forma bem mais rápida, confiável e estável do que quando se usa face tracking.

Como prometido, montei o clip com 3 pontos infravermelhos ativos. Além disso, troquei a câmera. Estava usando uma genérica de R$ 35 que capturava em 640×480 a 8 FPS; troquei por uma Logitech C270 (paguei R$ 120 na Santa Ifigênia, mas tem pra comprar na internet por ~R$ 80) que captura em 1280×720 a 30 FPS. Vale lembrar que quanto maior o framerate da câmera melhor vai ser o movimento da câmera do jogo (i.e. menos delay/lag e menos casos de o programa detectar a posição incorretamente), tanto em point tracking quanto em face tracking.

Veja nesse vídeo uma demonstração de uso no OMSI 2:

Aqui mais uma demonstração de uso, dessa vez no Euro Truck Simulator 2:

Continue lendo para ver o esquema do circuito e fotos.

(leia na íntegra…)

Clique para ver comentários ou comentar...


Atualização: Como prometido, montei o clip com 3 pontos infravermelhos ativos. Clique aqui para ver.


Sempre tive curiosidade sobre o TrackIR, que é uma forma de controlar a câmera com a cabeça. Ele possui uma câmera e um clip com 3 LEDs infravermelhos que você encaixa no headset ou em um boné. A câmera detecta a posição dos LEDs e com base nisso a posição da sua cabeça, e usa isso para controlar a câmera do jogo. Basicamente, você vira a cabeça um pouco para a esquerda e o jogo vira a câmera para a esquerda. O movimento é amplificado de forma que um movimento pequeno da cabeça corresponde a um movimento maior da câmera—assim você pode, por exemplo, olhar para o retrovisor direito sem ter que virar a cabeça ao ponto de não conseguir olhar para o monitor.

Infelizmente, o TrackIR é caro. Neste post eu falo sobre alternativas baratas/free para controlar a câmera com a posição da cabeça, da forma que o TrackIR faz.

Veja uma dessas alternativas em ação:

(leia na íntegra…)

Clique para ver comentários ou comentar...


Olá, pessoal.

Instalei o mapa Projekt Szczecin 4.0.1, e gostei bastante. Mas quando faço uma meia-viagem começando em Kołłątaja (e.g. linhas 57 e 63) os passageiros não sobem nem em Kołłątaja nem no primeiro ponto seguinte. A partir do segundo ponto depois de Kołłątaja eles sobem normalmente. Alguém sabe o que estou fazendo de errado?

Clique para ver comentários ou comentar...


Página 1 de 212