Encuesta

En cierta ocasión mencioné la rara discrepancia entre las estadísticas de visita de Blogger y StatCounter. Resulta muy raro que un día al mes, alrededor del 23-24, haya un pico de casi 300 visitas, de las cuales StatCounter ni se entera. Las visitas diarias según Blogger se mantienen entre 20-30, pero StatCounter solo ve 9-10, de las cuales 1 o 2 es un visitante que repite.
Por tanto, les solicito por favor que me ayuden respondiendo la encuesta que ven a la derecha. He tratado de cubrir todas las opciones posibles, no sé si alguien lee esto en una forma que no sea a través de la web o vía agregador de noticias. En esencia, lo que quiero es saber cuántas personas realmente pasan por aquí de vez en cuando o se mantienen al día.
Gracias por su ayuda.

Ensalada de programación

En esta semana he estado saltando de una cosa a otra, en mis ratos libres. Me han asignado dar clases, que no sería tan malo si fuese en un hotel de playa todo incluido, y además me pagaran por ello. A pesar de eso, me las he arreglado para trabajar un poco en varias tareas pendientes.
El martes logré implementar un sistema de ciclo día/noche, nada excepcional, solo porté mi idea anterior de Urho3D a Unity3D, con un breve vistazo a algunos tutoriales, para confirmar si iba bien encaminado. La verdad, ni idea de si voy bien. Pero al menos ya sé que puedo encender las luces por la noche y cambiar la luz solar. En el proceso, descubrí, con ayuda del modelador principal, que las point lights no producen sombra en deferred rendering si la cámara está en vista ortográfica. Vaya mierda.
Ayer me di a la tarea de portar el editor de diálogos a Windows. tuve que pasarme a Qt 5 porque Qt 4 no es compatible con Visual Studio 2012. Después resultó que sí podía haber utilizado la 4.8, porque el paquete incluye Qt Creator, y el añadido para generar proyectos no funciona si lo que tienes es VS Express. Vaya mierda, si no puedes pagar, no puedes desarrollar con Qt y VS. Ahí me encontré con el pequeño inconveniente de que no encuentro como reutilizar el código y el diseño de interfaz. Lo preocupante es esto último, parece que tendré que rehacer el UI desde cero. He tratado de ver el lado positivo: así me lo pienso mejor y rediseño la interfaz, que se estaba haciendo compleja. La otra opción es mandar Qt al carajo y asesinar y violar a alguien.
Incluso, logré dedicar unos minutos en casa a estudiar el parseo de XML con System.Xml. Se recomienda evitarlo, pero para Mono.xml no aparece documentación, y una mirada al código fuente no me aclaró nada. Habrá que cargar con el megabyte extra que representa System.Xml, espero que eso no le moleste a nadie. De hecho, no les ha molestado que The Witcher 3 pida 6Gb de RAM y un tarjetón, así que tendrán que disculparme si uso System.Xml y el ejecutable del juego se lleva un poco más. La cosa no es tan difícil, debería poder implementar la carga de diálogos pronto. Mostrarlo ya son otros veinte pesos.

The Witcher 3

El desarrollo se está haciendo notar de cierta forma en Cuba. A pesar de ser una cantidad respetable gigas, ya está aquí The Witcher 3. La última aventura del brujo Geralt de Rivia no ha tardado ni dos días en descargarse y llegar desde la capital del país hasta el Oriente, siempre atrasado en todo. Será el famoso cable, o la bajada de los precios de internet, o la relativa abundancia de conexiones más rápidas.
Lo jodido del caso es que no puedo jugarlo, me quedo bastante corto en especificaciones: ni CPU, ni RAM, ni tarjeta de video. Lo mismo me sucede con el último Dragon Age, del cual he tenido que pasar. En este momento, mi tarjeta está alquilada (necesito el dinero) hasta el mes próximo, lo demás sí que no tendrá solución a corto plazo. Supongo que la tarjeta ayude, si antes desactivo el HairWorks de Nvidia, que está causando una verdadera bronca de barrio entre las dos compañías, porque AMD dice que los verdes sabotearon el rendimiento del juego en sus tarjetas con premeditación y alevosía.
Obviamente, los middlewares ligados a un fabricante de hardware son como un caballo de Troya y les recomiendo huir de ellos. A menos que te paguen mucho, claro.

La "nortificación"

Echale un vistazo al mapa de Canción de hielo y Fuego. También mira el de El Señor de los Anillos. ¿Notas algo en común? Obvio, el título del post lo dice todo: están al norte del planeta (el que sea). No quiero ser absoluto y decir que es una tendencia de todos los escritores, pero a mí también me sucedió. El Medio Mundo es un continente situado en el hemisfero norte de Elymuria. No sé por qué, resulta chocante imaginarse un continente en el hemisferio sur.
Cuando inicié la tercera novela, con mundo nuevo (y mejorado), arranqué por el worldbuilding. Me había prometido no cometer los mismos errores, no señor. ¡Esta vez serían errores nuevos! Ya estaba hecho el mapa, y como siempre, estaba al norte. Con las clásicas praderas congeladas al norte, hogar de los gigantes, y países bárbaros, también al norte, aunque un poco menos que los gigantes. Tal parece que los bárbaros solo pueden provenir de países fríos. Y entonces vino la pregunta: ¿por qué siempre al norte? En cualquier momento me acusan de discrimar al sur y a los pueblos oprimidos.
No había más remedio que rehacer el mapa y corregir las referencias a los puntos cardinales en las pocas páginas que había escrito. Mandé los gigantes al sur. Los bárbaros se quedaron al norte, pero esta vez son un pueblo nómada que habita praderas áridas semidesérticas y zonas montañosas. Nadie pareció molestarse por el cambio.

Urho3D 1.4

El viernes se liberó Urho3D 1.4, cuya novedad más importante es el soporte para DirectX 11 y OpenGL 3.2, que ya se venía echando en falta. Una cosa es proveer compatibilidad hacia atrás, y otra es quedarte atrás. Supongo que también vala la pena mencionar el soporte experimental para Emscripten y crowd navigation, sobre todo esto último que suena muy bien en la lista de funcionalidades de cualquier motor o juego. Hay un montón de arreglos y adiciones menores, como es habitual (y necesario).
Esperemos que la próxima versión no se haga esperar tanto y que Urho3D siga mejorando. En especial, sería recomendable que implementasen algún mecanismo de despliegue, como el One Click Deploy de Godot.
Aunque ya no lo uso, periódicamente le echo un vistazo al foro para ver cómo van las cosas, y no dejo de recomendarlo para los que quieran empezar un proyecto 100% libre. Sin embargo, calculo que Urho3D solo alcanzará su verdadero potencial en un año o año y medio. Hay muchas otras cosas muy necesarias que le faltan, como un buen editor de terrenos y de UI layout integrados. 

Un curioso cheque

Acabo de recoger en la Casa del Joven Creador (aunque no sea un "joven creador")  un cheque de pago por mi presentación de la novela en la Feria del Libro, aquí en mi ciudad. A diferencia de la Habana, algunas de las presentaciones de Santiago están a cargo de la Asociación Hermanos Saíz, que sí paga por las presentaciones. Una bagatela, pero que me viene muy bien para comer tres o cuatro días, pues como siempre digo, acepta lo que te den, porque es mejor poco que nada.
Lo curioso del cheque está en su parte trasera, donde dice:

Pago al sector privado 
"Novela de caballería"

O sea, que para los burócratas de la AHS, yo soy un escritor de novelas de caballería. Lo cual, supongo, me convierte en una especie de émulo del ilustre Cervantes, el Discapacitado de Lepanto (eso de manco suena muy feo, discapacitado es más políticamente correcto).
A este humilde mercenario de las letras, le da lo mismo que lo cataloguen como escritor de caballería, ensayos, o novelas rosas, siempre y cuando me paguen, claro.

Segundo tutorial de Unity3d: personajes modulares

Ya está publicado el segundo tutorial, que detalla una solución para construir personajes a partir de mallas separadas en Unity3d.  El código es básico y debería ser fácil de adaptar a cualquier proyecto, el resto de las instrucciones en inglés se reducen a esto:
  1. Modelar el personaje dividido en las secciones necesarias, con un esqueleto común.
  2. Exportar cada sección por separado, pero incluyendo el esqueleto.
  3. Exportar el esqueleto sin geometría.
  4. Crea un prefab o GameObject con el esqueleto y el Animator, que será la base para la jerarquía de objetos del parsonaje.
 Advierto que el código funciona, pero podría ser mejorado, se agradecen sugerencias de desarrolladores experimentados.

El nuevo villano de Star Wars

Es solo impresión mía o alguien más creeo que  Kylo Ren parece un jodido emo?A ver miren esto:


Tal parece que nos está diciendo "soy un puto emo, estoy harto de la vida y quiero suicidarme". En cambio, Darth Maul es otra cosa:


Este es un malo con carácter. No está diciendo: "voy a violar a tu hermana, matar a tu gato y voy a publicar tus fotos guarras en Facebook para que mis amigos sith se rían de ti."
Definitivamente, ya no los hacen como antes.

Tutorial: cámara isométrica con Unity3d

Hace unos días publiqué en mi otro blog (en inglés) un tutorial muy sencillo para implementar una cámara isométrica, usando Unity3D. Mi implementación es el resultado de unir todo lo que estaba disperso por ahí en un solo script que ofrece todas las funciones que me interesaban. Como extra, incluye evitar que la cámara se salga de los límites del terreno.
Por supuesto, es mejorable. Me gustaría cambiar el actual sistema de desplazamiento, que depende de que la cámara esté orientada en una forma concreta para que se mueva en la dirección correcta. Sin embargo, tengo otras cosas más importantes que hacer antes de meterme en nimiedades, así que espero que les sirva así como está.

Casi un best-seller

Una de las cosas que me aclaró un amigo acerca de las ventas es que nunca se sabe con exactitud cuántos ejemplares se han vendido. Quizás haya alguna forma de saberlo, o alguna estadística perdida que lo diga, pero en concreto, no es de interés para nadie, excepto el autor, y ese no le importa a la editorial o el Instituto del Libro. Acá la publicación trabaja en base a un plan de cupos editoriales, hay X cantidad de libros que puedes publicar, y la editorial se ajusta a eso, escoge entre las ofertas, imprime y le vende al Insituto del Libro, que a su vez lo distribuye entre las librerías. O lo deja en los almacenes como alimento para polillas, que tu libro no estén en las librerías no significa que se haya vendido el 100% de las copias impresas.
Luego de la Feria del Libro acá en la ciudad, he alcanzado a ver dos o tres ejemplares en las librerías, aún cerradas (les toma 15 días inventariar lo que sobró de la Feria y empezar a vender otra vez). No sé cuántos llegaron, pero parece que durante el evento se vendieron más de la mitad en solo un día. Teniendo en cuenta que vivo en una ciudad bastante pobre, con muy pocas personas que lean, y de esas, tal vez una décima parte lea fantasía, se puede decir que me ha ido bastante bien.
Hay algunos lugares del país a donde no ha llegado, y por supuesto, ni pensar en encontrarlo fuera de las capitales de provincia. Por lo menos no he tenido la decepción de verlo amontonado en los estantes, ventajas de una tirada pequeña: solo 3000 ejemplares.

Reescribiendo la historia

No, no se trata de reescribir la Historia (ojalá pudiera, para corregir algunos errores, como por ejemplo, haber nacido pobre y en Cuba), sino de reescribir algunos aspectos de la trama del juego. Era algo que tenía descuidado por estar imbuido en el proceso de probar diferentes motores e implementar un prototipo sencillo. Por suerte, con un equipo de trabajo, puedo delegar algunas tareas, aunque las de programación siguen siendo mías, por el momento.
El caso es que trabajar en equipo demanda que algunas cosas estén bien organizadas, o por lo menos descritas de alguna forma. Es hora de plantearse con seriedad algunos aspectos de la trama, definir bien claro detalles del mundo de Elymuria, de sus habitantes y su sociedad. Entre otras cosas, estoy eliminando bifurcaciones, como por ejemplo ubicaciones que eran solo Alineación Malvada. Es posible jugar como un hijo de puta, pero incluso los personajes buenos tendrán que enfrentar decisiones que caen dentro de lo gris, o relacionarse con personajes con una moralidad opuesta a la tuya, o algún simpático viejecito que creías tu amigo tratará de matarte para robarte los zapatos. O sea, fuera el blanco y negro, al igual que en los libros, aunque no desaparece del todo el concepto de alineación, más bien se transforma en Reputación y afectará, por supuesto, la reacción de los NPCs hacia tu personaje. O al menos, esa es la idea, hay que ver cuánto me toma implementar ese sistema.

Reporte de fin de semana

Muy poco que decir, como ya dije ayer. Hasta el momento hay unos pocos mecanismos básicos del proyecto completados o al menos, entendidos. El procedimiento de equipar armas ya está: era cuestión de comprender el instanciado de prefabs y el método basado en Resource.Load(). El sistema de cámara funciona 100%, incluso cosas que no me esperaba. Ya tenemos una vista isométrica que me complace (sí, les debo el brevetutorial, que no videotutorial), con desplazamiento, zoom, rotación, y que además no se sale de los límites de la escena.
Hay un montón de ideas dando tumbos en mi cabeza, acerca de cómo manejar las listas de entidades, items, etc., mayormente producto de ver tutoriales sobre cómo hacer RPGs con Unity. No sé en qué momento podré organizar todo eso y convertirlo en código. Preferiblemente, código que funcione.
Ah, y he iniciado una campaña de donaciones. Pueden ver el botón de Paypal ahí arriba, a la derecha. Ya lo estamos necesitando, porque se me hace difícil pagar todas las llamadas de larga distancia, ahorrar para las piezas que necesito, y además porque los muchachos se lo merecen. Habrán recompensas, como en Kickstarter.

Aún estoy vivo

Un breve post para decir que sigo vivo. He tenido un días muy ocupados, trabajando en el proyecto y atendiendo montones de problemas en la oficina, mayormente derivados de máquinas que llevan años sin mantenimiento y trabajando en condiciones horribles (por ejemplo, medio día sin aire acondicionado en pleno verano del Caribe).
El asunto que me ha estado complicando la existencia en estos últimos días es conseguir ensamblar un personaje a partir de geometrías separadas. Alejandro, el modelador, se percató desde muy temprano del problema del clipping, que yo me había pasado por alto porque nunca tuve modelos adecuados para hacer pruebas. De ahí saltamos a la personalización de la apariencia del personaje (ya que nos vamos a joder, pues a joderse por todo lo alto) y mirando una presentación de CD Projekt Red, concluí que mejor nos jodíamos mucho más: personajes de relleno únicos creados por combinación de partes.
La cuestión es que un procedimiento que supuse que sería muy demandado no está documentado para Unity3d en ningún lugar. He pasado una semana haciendo preguntas en foros y probando cosas, para lograr solamente acercarme a la solución.
En concreto, la idea de base consiste en tener un GameObject padre y adjuntarle un arreglo de GameObjects, cada uno conteniendo la parte en cuestión. Dicho así parece trivial, y lo es, si tienes en cuenta detalles como que cada parte debe exportarse con el esqueleto o no se animará. Ahí entran a jugar otras cosas, el nuevo sistema de animación de Unity3d requiere que cada geometria animada tenga un componente Animator con su correspondiente Animation Controller y un Avatar, que es como la conexión entre el sistema de animación y el esqueleto como tal.
Este es el punto donde todo se ha ido al carajo, aunque consigo armar el personaje, no logro que pase de la animación por defecto. He probado muchas combinaciones: usar el avatar de la malla de la cabeza, usar el avatar del esqueleto exportado sin geometría, y aún me quedan más por probar. Justo ahora acaba de ocurríseme que podría exportar sin esqueletos y en unity decirle al prefab que lo copie de otro avatar.
En fin, que hasta que no encuentre a alguien que haya hecho esto y me lo explique en letra de molde, parece que tendré más días ocupados y dolores de cabeza (literalmente).