Planeta Codepixel

26 de January, 2012

Divagaciones sobre game programming

Oil Rush ya es gold

Al fin, la versión gold de Oil Rush estuvo lista en la fecha establecida. Para los que no lo sepan, la versión gold es la que se envía para su replicación, si no recuerdo mal. En este caso, supongo que sea también la que se envía para su distribución digital. Como sea, el caso es que ya pueden darse un salto por Steam, Desura y hasta los etcéteras y adquirir el susodicho título, que ya está disponible. Como del mismo se ha hablado hasta el hartazgo, omito detalles, pero les diré que las tomas de pantalla que están circulando dejan muy atrás lo que hemos visto en las betas. Al menos a la que tuve acceso como desarrollador de Unigine.
Aunque el número de pre-reservas no fue significativo (y ya hablé al respecto), ahora que el juego es noticia otra vez puede ser que las cosas cambien y Unigine Corp. logre recuperar la inversión hecha en el producto.

by Roger Durañona Vargas (noreply@blogger.com) at 26 de January, 2012 02:42 PM

24 de January, 2012

Divagaciones sobre game programming

Entrevista a Max Schaefer

Acaba de publicarse una interesante entrevista a Max Schaefer, miebro del equipo creador de Diablo, pero más conocido por fundar junto a su hermano Runic Games, la compañía detrás de Torchlight. El equipo se encuentra enfrascado en su próximo título, que será Torchlight II. Aunque los planes iniciales eran lanzar un single player y de ahí saltar a un MMO, al parecer el estudio está tratando de acumular más experiencia y fondos para acometer una tarea tan gigantesca. Lamentablemente no hay detalles técnicos acerca del proyecto (hay mucha gente que quiere saber si aún usan Ogre), pero no está de más leerla.

by Roger Durañona Vargas (noreply@blogger.com) at 24 de January, 2012 10:23 PM

19 de January, 2012

Divagaciones sobre game programming

Nuevo joystick

Ayer recibí mi nuevo Logitech Attack 3, que me costó un poc omás caro de lo que esperaba a pesar de ser el producto más barato de la gama Logitech y de todos los joysticks en general. Me sorprendió gratamente, porque me esperaba algo más sencillo y con una base más pequeña, sin embargo, este se parece mucho a mi anterior Wingman 3D. Incluso, algún dato en el nombre o la descripción me había hecho creer que tenía solo 3 botones, pero tiene 12.
Mi primera prueba fue con el Falcon 4 Allied Force. Me gustó la suavidad con que el avión responde al mando, sin giros bruscos. De ahí salté al Il-2 Sturmovik, pero éste require algo de configuración, pues por alguna razón no viene configurado para usar el joystick como mando principal. Algo ilógico, creo yo. Me faltaría probar el LOMAC, y en general darle un poco más de uso, porque apenas fueron unos minutos. Luego de este fin de semana tendré una opinión más definitiva y sabré si fue una buena compra o no.

by Roger Durañona Vargas (noreply@blogger.com) at 19 de January, 2012 02:52 PM

16 de January, 2012

Divagaciones sobre game programming

Termina el culebrón de Bethesda vs Interplay

Luego de un largo proceso muy similar a un pleito de viejas, al fin se ha solucionado el asunto referente a los derechos de producción de un juego online basado en el universo Fallout. El arreglo estipula que todos los derechos sobre la propiedad intelectual pasan a Bethesda, excepto las ventas de Fallout 1, 2 y Tactics, que pertenecen a Interplay hasta diciembre del 2013. La creación del llevado y traído juego online pasa a manos de Bethesda, Interplay recibe como compensación 2 millones, cada cual paga sus gastos de juicio y copiando a Pérez Reverte, que cada perro se lama su órgano.
Para los no informados, esta historia comenzó cuando Bethesda adquirió los derechos de Fallout, en un momento en que Interplay estaba como yo, con los bolsillos al revés. Las condiciones del trato concedían a Interplay el derecho de desarrollar un Fallout Online siempre y cuando aseguraran $30 millones para su financiamiento. En un momento determinado del que no quiero acordarme, Bethesda consideró que las condiciones se habían incumplido y desde esa fecha se ha gastado más dinero en abogados que en desarrollo como tal.
Ahora, todo el trabajo hecho va a la basura y el susodicho juego tendrá que esperar otro par de años. Eso, si Bethesda tiene interés en desarrollarlo.

by Roger Durañona Vargas (noreply@blogger.com) at 16 de January, 2012 06:11 PM

12 de January, 2012

El hombre alto

Motivation in games

Lately I've been thinking about games, and what is it that makes them work. Most likely, everything I'll write here has already been said by somebody else, but I find that putting things down in paper (or blog) is useful to get my thoughts clear.

So, my last realization is that most games revolve around the concept of control or domination. The purpose of a game is for the player to try to control the game world itself, to change it at will. For example, in an FPS, you try to control the game, following its rules, to defeat enemies and meet objectives. In Tetris, you try to control the set of pieces you're dealt.

Of course, the beauty (and fun) of it comes not in the control itself, but in the struggle to get it. A game where you have absolute control over everything wouldn't be much of a game, really. Conversely, a game where you cannot control anything would scarcely be a traditional game, but something more similar to a film or an "interactive experience".

And this is something that got said about the Amnesia game, that it wasn't very game-like. It really doesn't allow you to control much, apart from the direction to run away in terror, yet it was very well received by game critics and sold quite a few units. How is that possible? I believe it has to do with the human desires it tries to instill in the player to fuel his/her motivation to play. Let me explain.

There's a psychological theory that says there are 16 different desires that motivate people into action. They are (copied verbatim from the wikipedia page):

    • Acceptance, the need for approval
    • Curiosity, the need to learn
    • Eating, the need for food
    • Family, the need to raise children
    • Honor, the need to be loyal to the traditional values of one's clan/ethnic group
    • Idealism, the need for social justice
    • Independence, the need for individuality
    • Order, the need for organized, stable, predictable environments
    • Physical activity, the need for exercise
    • Power, the need for influence of will
    • Romance, the need for sex
    • Saving, the need to collect
    • Social contact, the need for friends (peer relationships)
    • Social status, the need for social standing/importance
    • Tranquility, the need to be safe
    • Vengeance, the need to strike back/to win

If we look at the list, the element for what I've been calling "control" would be "power". Also, games generally use some other element from the list, like curiosity (adventure games), order (puzzle games), physical activity (dexterity games) or tranquility (plain survival would fit in here). The main motivator however, from Sim City to Bejeweled, is almost always to exert control in the game world to meet certain objectives.

But not in Amnesia! That game substitutes the control motivation with a terribly strong survival (tranquility) motivation. The game makes it very clear from the start that you're powerless to control almost anything in the world. You can explore, and if you find something nasty, the only thing you can do is run or hide. You're not trying to "beat" the game and come out triumphant feeling you achieved to "change something". You're just trying not to die the next time you open a door!

And now the question is: could this same thing be done with a different main motivator? Could we create a game where the main motivation is independence? Or idealism? Or even vengeance? It most likely wouldn't fit the traditional definition for what a game is, but it would surely be interesting! 

If somebody gives a shot at it, I promise you'll get my money!



Oh, and if somebody hasn't seen Amnesia in action, check out this video. Turn down the volume, by the way, the player gets quite scared. Also, there's quite a lot of f-word in the video...

Skip to 2:00 if you want to get to the really intense (and fun) stuff ;)
 


by Jon Valdés Furriel at 12 de January, 2012 09:14 AM

11 de January, 2012

Interface

2 telediarios

Este viernes, dentro de 3 días, se acaba la producción de The Pirates! en Aardman. Después del viernes vuelvo a ser libre en manos de FSM y del viento! Estos próximos días estaré haciendo la mudanza, y para la semana vuelo de vuelta a España.Hace un par de semanas, y dado que todos los demás (Leer resto de la noticia | read full post)

11 de January, 2012 07:06 PM

07 de January, 2012

Strawberry Iq

31 de December, 2011

El hombre alto

New year, new me

Today's officially my last day working for RandomControl.

In these last two years I've learned a lot. Chema Guerra is the most proficient C++ programmer I've ever seen, with his almost obsessive dedication to clean code and design, and he's certainly passed lots of that to me. When I began here, I thought of myself as a pretty good C++ programmer. Now I'm a lot better and I know I still have a long way to go before I really get to be "pretty good". Thanks for the humility lesson, Chema xD

Also, in this job I've had to work in C++, C, Objective C, python, ruby, javascript, lua and a couple of small scripting languages, filling my need to learn new things all the time. I really need to shake my brain a bit every few days to keep me interested, and that helped a lot.

I also have to thank Chema for giving me so much freedom with working schedule, holidays and work objectives. Another great thing is that, as I had to move from one side of the country to the other, the fact that we've been working from home was a real godsend for me.

To the RC testing team, I have to say you are one of the best CG artists I've ever seen, and your renders are so great it's usually impossible to tell they're CGI. Keep up that amazing work! And most importantly, you're great to work with, always giving great feedback and making our work feel valued. I'll miss working with you, guys!

But it's now time for me to move to new things, so best of luck to the RandomControl team, the most hard-working guys I've seen in my life. I really wish your amazing work really pays off, you sell like pancakes and become trillionaires or something. As for me, it appears I'm going back to my old hobby: games development!

Stay tuned ! ;)

P.S: With a bit of luck, I'll be able to update this blog a bit more often. Most likely I'll just post updates in twitter, but I'll try to post something here too. Btw, my twitter is @jon_valdes :)

by Jon Valdés Furriel at 31 de December, 2011 04:27 PM

10 de December, 2011

Interface

One ideal (for me) Window Manager

Today I was wondering how my ideal Window Manager would be. After some hours playing, I got this:Click to maximizeBefore you say anything, I know I know, it needs to be polished lot more and it lacks TONS of things, but hey, it's just a rough concept.. The main features are:- With no windo (Leer resto de la noticia | read full post)

10 de December, 2011 08:30 AM

23 de November, 2011

Interface

Animales disecados

Hola! hay alguien ahí todavía?Ahora con la moda de las redes sociales, los blogs personales están cada vez más en desuso, disecados... que si tuiter, que si feisbuc.. ahora el que tiene algo que decir ya lo dice en una de estas webs, no necesita un engorroso blog personal. Hasta que vuelva a cam (Leer resto de la noticia | read full post)

23 de November, 2011 03:36 AM

26 de September, 2011

Jesús de santos

Twitter

Whoops, long time since my last post! It’s been exciting days this last year working very hard in different projects starting an own small business with my partners. Next week we are going to...

by ent at 26 de September, 2011 04:12 PM

25 de August, 2011

Strawberry Iq

24 de August, 2011

Strawberry Iq

20 de August, 2011

Strawberry Iq

21 de July, 2011

Interface

Holy Night!

En 2008 trabajé unos meses en Dygra para la película Holy Night! , cuyo estreno está previsto para estas navidades. Con permiso de la empresa, he publicado en la web algunas de las cosas que hice. Como veréis, es un poquito de todo: ilustración, estudios de color, estudios de iluminación. (Leer resto de la noticia | read full post)

21 de July, 2011 04:03 AM

14 de May, 2011

Soledad Penades

Google I/O 2011, day 2

I woke up quite late today-at 7.30. But got quickly in motion: the keynote was at 9.30h, so I didn’t have as much time for slacking as yesterday! It was funny trying to identify more fellow attendees on the way to the Moscone center. None of them got their badges out, but the backpacks and messenger bags were extremely telling in this area of financial suitcases :-)

Once in, I went directly upstairs, to the 2nd level, where I knew was some extra breakfast seating… which was way more relaxed than the one on the ground floor (or “level 1″ as they called it). My strategy worked, and I was able to grab a couple of strange tasting pastries. While I was having the breakkie, someone who looked familiar appeared, accompanied by a collaborator, both closely followed by someone else whom I couldn’t identify either. The first two sat down on a table further away from me, and the follower sat there too, but at an strategic distance, while he kept talking and looking enthusiastic and the others seemed very disinterested. Then I saw the biggest guy’s name and understood everything: it was Michael Arrington and (probably) one of his pupils, and the third guy was trying to convince them to talk about his website at all costs. Though it didn’t seem like working as they just replied random Huh-oh… Uhm… really? OK from time to time–when they weren’t looking elsewhere. A bit sad (and creepy).

Finally, the keynote room opened its doors, and the considerable amounts of people waiting were able to slowly get in. I also noticed there was a lot more cameras and media people than yesterday, and I couldn’t but keep asking myself whether the journalists room/area had already been there yesterday, but I couldn’t remember.

In the hall, this time I got a seat, and not in the middle of a lot of people, so it was great. There wasn’t any countdown as in the first keynote, but there were lots of people taking pictures anyway, this time imitating the same gesture they do with their phones, but putting the tablets they got yesterday in the air instead, which makes it a bit embarrassing or annoying, depending on the moment.

The keynote started after having been politely asked to turn off “any hotspots” several times. I hadn’t used any of those before, but it seems portable hotspots are a big thing in the States. Or at least at the I/O… Anyway, it didn’t seem to work, since I still could find lots of wifi networks with my phone.

Vic appeared on stage again and quickly handed over to Sundar Pichai, which way less enthusiastic than Vic, and that was a bit of a downer. He described various nice feats achieved by the Chrome team since the last I/O, then handed to another guy who described more particular details, then that guy left the stage, and the cycle repeated. From all of what they announced, it seemed interesting they were just going to charge 5% for in-app payments… and made me wonder whether they would do the same with the Android market at some point. Now that would be cool! ;-)

There was the Chromebook and their pricing that got everyone clapping… well, except probably me. I couldn’t stop wondering whether they had considered the privacy implications of copying everything “to the cloud”, specially when we’re talking about corporate and educational environments migrating to use Chromebooks. And what with their customer support!? If it’s as good as the support for their other projects… (and I’ll leave it there) .

A good thing was that those machines will be jailbreakable. That always makes hardware more attractive (and relevant, in my opinion). But I can also foresee it doesn’t guarantee anything, specially if they get the same closed binary drivers issues we’re getting with Android. Which they will probably get, since they don’t have the latest word on the hardware those computers will be using, and it’ll be completely up to the vendors to integrate open source hardware or just proprietary stuff as usual.

Later the guy from that Angry birds game came up on stage to explain how awesome the newly ported to Chrome version was, and during all the time he was on stage praising the game and trying to convince me to play it (since it seems like I’m the only one who has yet to play it) I couldn’t stop wondering what took them that long to port it. My point is: since it worked on mobile phones, which are underpowered in comparison with full-fledged computers, there was no reason it wouldn’t work on a normal computer. It sounded like a bad excuse. Specially since mrdoob made his Chrome ball pool and Google Gravity experiments a couple of years ago already, and both used Box2D, with Javascript, way before v8 and jagermonkey were as fast as they are now. I truly didn’t understand anything, but I was surrounded by a mass of hysterical people and they looked at me and wondered why I wasn’t clapping like crazy too (and at the end I didn’t).

Then Aaron Koblin did a short intervention presenting a sneak peek for the Rome project, and then explained they had used three.js and mrdoob was working on the project too, and the die-hard fans in the front rows just went WOOOW YEEES WOHOOO crazy-crazy. It seems being honest about the libraries you’re using earns you lots of good karma ;-)

And when they finally announced they were going to send a Chromebook to every attendee in June–when it was a physical reality and in production, I thought the ceiling was going to collapse and the entire hall was going to fall down. Yesterday’s tablet announcement effect was nothing compared to this!

I immediately moved to another floor for Chris Pruett’s talk about building “aggressively compatible games for Android“. I’m not currently writing games but I’d like my apps to be playful and compatible with as many devices as possible, so I believe those were two valid reasons for attending the session! Some of its contents weren’t new to me, but there were some tips that I hadn’t heard of. For example, if a device doesn’t comply with the compatibility guidelines (and hence doesn’t pass the set of automated tests), Google won’t allow it to have the Google applications such as Maps, Market, etc. Which in other words means that if a phone has the Market application, it complies with a minimum set of requisites. It was also funny that Chris’s first words for the audience were “Hey folks”. Very looneytunesque, I loved it!

It was then time for a super very early lunch, since it was the only free time I’d had today between interesting sessions. As it happens, there was a huge amount of people already queuing, so I just joined the queue. Queueing was beginning to shape itself as the official alternative activity in the I/O!

I was a bit luckier with my table mates today, and we talked a bit about an assortment of things such as the food not being really Mexican, the ‘proper San Francisco hacking areas for coffee shop working’, etc.

When I finished, I tried to see if the tablet issue could be solved already, although it wasn’t 15h yet, and I had been told to go to that counter at that particular hour. As I kind of expected, they repeated me that again… so I went up for the Learning to love JavaScript session, but it had already started so it was slightly packed and hard to follow without a context, therefore I decided to simply grab a coffee and take it easy while waiting outside for the next session.

As I waited for the Evading pirates and stopping vampires session, an unknown guy approached me and asked what I did-did I develop Android stuff or…? I showed him Nerdstalgia and Instantanea, but he didn’t seem too impressed :-)

Then after I sat, another unknown guy asked me if the seat nearby was free. He sat and asked me if I was an Android developer … and then told me he came from Spain, so I just told him we could speak in Spanish then!

So he was from the Canary Islands, where they have an slightly different accent than in Peninsular Spain, and that had confused me at first. He was also an amazing connoisseur of Android phones. He knew all about the processors, available memory, small differences between consecutive models… really impressive. And he also told me that I should absolutely stay for the next session (in that very room), because one of the Sony-Ericsson guys had told him that if he was interested in the Xperia Play, the “Writing Android games in C++” session would “interest” him. It also “interested” me, so I decided to sacrifice the Chrome fireside chat in exchange for an hypothetical phone with joystick controls.
Multitouch is cool, but nothing beats a good old button.

The “anti-pirates” session clarified some concepts that were a bit blurry for me yet in regard to licensing, and Dan really insisted in us adding analytics to our applications and keeping track of various metrics in order to not only find out where are we doing wrong as developers but also what are the users doing with the app: how many times it’s launched, etc… and while I understand that it could work for a game, I’m not so sure about my current applications. I have to think about that, but for the moment it simply looks a bit too creepy, considering that Instantanea is already requiring GPS, external storage and camera permissions. If I was asked for internet permissions for a camera application, I don’t think I would allow the installation of that app. My paranoia would quickly kick in and say NO WAY.

On the other hand, I liked the way they proposed to convert casual pirates into customers, allowing some free play before popping up a “I have children to feed” dialog, while at the same time assuming that uberpirates will never be stoppable because they are way more determined to crack an app than we are to add complicated mechanisms to prevent that happening. I still am not totally sold on the whole licensing scheme; it usually adds more issues than solves.

The C++ session was half done by Dan too, and while I had read about the NDK, again there were some things I didn’t know yet, specifically the best way of dealing with OpenGL and GLSurfaceView’s quirks. And you guess what? The guy from the stand wasn’t lying. At the end of the session we were told to stay in the room for some interesting stuff, which was a card exchangeable for the phone on the Gear Pickup counter! Although I couldn’t but wonder whether they would just give me the phone or again make me visit the counter tomorrow :-D

On the way out I found Unai Landa, an old school Spanish demoscener, which as usual had forgotten my face and had to look at my badge to find out who I was :-P It has already happened twice already, once at Euskal party in 2003 and then in the way to the pmp in Madrid in 2005, so I just thought: old Unai, hasn’t changed!

And then, the deciding moment. Would they solve the mysterious tablet problem? I was slightly scared of trying, but I did so anyway…

And as it happens, I have written pretty much the entire post using the tablet!

For everything else, it’s pretty smooth, but the WordPress editor interface is a bit slow. Maybe it’s its Javascript which is slowing things down. I have to test it more before emitting a definitive opinion, but so far I like it more than the iPad form wise. It’s lighter and thinner… and has multitasking. So you can leave something updating or syncing and go to another activity more engaging than a progress bar, you know, that kind of things :-P And when you come back you don’t have to restart the download again (as it happens in other tablets).

Back to the I/O, once I picked the stuff I went to the “Lessons learned from Google Body” (for Android) session, and again most of the stuff I already knew, but it was a good wrap up with some new insights. And then… booh, the event was finishing quietly, without any bell or whistle, which was a bit sad after all the expectation of the keynotes. It felt as if something was missing.

So I went to the Larva Labs stand to see what they were up to and how things were going with their stand, and turns out they were giving away copies of a cute game they had developed, Gurk II. Well, actually you had to connect the phone to their computer and then they installed the game in your phone. It is an 8-bit style game and it’s got a very peculiar interface. And the music! Everything fits into place.

Things were coming to an end, and we had been gently invited to leave several times so that the vacuum cleaner could go through the areas we were in, so we finally exchanged twitter id’s and waved goodbye everyone. I went back to the hotel as fast as I could so that I wouldn’t be mugged by any of those strange characters that you can find in San Francisco, and found mr.doob there, furiously working on the ROME project (he actually went as far as staying up the rest of the night, and even made and commited some last minute fixes while waiting for boarding the plane to New York, where we are now for the Seven on Seven event).

But before leaving San Francisco I had the opportunity to briefly meet the super cool guys from the Data Arts Team at Google, which came up with the most super awesomely geek farewell ending that one could say these days:

See you at github!

It was a pleasure to meet you guys! :-)

To sum up: a very intense event. Maybe a bit too intense for only two days. Yes, the sessions are recorded and published almost immediately, but what I appreciate most from this sort of events is being able to talk with the speakers and ask them the questions, get their instant feedback, and maybe ask them another question, which I can’t do if I just stay home and watch prerecorded sessions. Most of the times there were many interesting sessions happening at the same time, so deciding which one to attend felt like a little sacrifice as I mentioned before. I understand the cost of running an event such as this one is quite high so probably they worked out that two days was the optimum amount of days in economical terms, but still, the suggestion is there for them to pick (or ignore, haha).

In regards to the goodies: wow, that even felt indecently rich. While other events do not even give you a sandwich, Google I/O feeds you and gives you stuff to develop with, apart from providing you with knowledge, which is the main point of a tech conference, of course. And it not only encourages to develop for these platforms, but also really helps a lot. First, because acquiring hardware is always an extra expense we cannot always afford, and secondly because as they are early versions of the hardware, when the final users got those “new” devices they won’t have to wait for applications that exploit it. So it’s not as if they are frivolous goodies–they are useful, and will be fed back into the system, somehow, as we develop and test applications with that new hardware we’ve been given. For example, we’ve been testing every app with the Evo 4G mr.doob got at 2010 I/O, and actually found differences that were impossible to notice (or very hard to track unless you get a report from a user) if we hadn’t tested the apps in the device.
is
So do I recommend it? Absolutely! I am super thrilled with all the knowledge I’ve acquired and I’m so looking forward to come back to London and start applying it (and watch the sessions I couldn’t attend). Meeting so many developers was also amazing. It really gives you a strong sense of community and involvement that I think is very important for any platform to succeed.

I still have a sort of doubt, and it is what is really Google’s strategy. Because they are really, really promoting Android, but obviously their business is in getting everyone to use the web more and so they are promoting the Chromebooks with everything in the cloud and etc… The best explanation I can think of is that they are taking risks (albeit quite huge obviously) and betting for several things to succeed instead of just resting on their laurels. Whoever strikes first… as they say. Let’s see what happens, but right now it is definitely disconcerting, both as user and as developer.

NOTE: This was supposed to be finished and published on the very day that the I/O ended (Wednesday the 13rd), but we spent almost the entire Thursday traveling and I didn’t finish revising it until today (Friday). So apologies if you were waiting for this second part desperately!

flattr this!

by sole at 14 de May, 2011 04:00 AM

20 de April, 2011

Rubén Penalva's blog

Test: Gpu Raymarch of Distance fields

Click here to view the embedded video.

Features

  • Ray marching of distance fields done on the Gpu inspired by IQ demo “Slisesix” and  Shadertoy. The video shows two scenes rendered with a pixel shader: the simple scene showing basic distance fields and the more elaborated one, showing procedural distance fields and shading.

Downloads

Report

This test is heavily inspired by the IQ’s work done on ray marching and his several raymarched demos. The test builds the pixel shader, which is the ray marcher, on the fly everytime the shader changes. The algorithm is as straightforward as cast a ray, sample the distance in a position and advance to the next with the distance obtained until you reach a minimun distance or a maximun number of iterations. The distance fields are functions like spheres, cylinders and torus. The fun comes with the csg operators you can use like union or difference. I have had a great amount of fun developing the procedural distance fields but requires a lot of tweaking and time.

Controls

  • Left click plus mouse movement to rotate the camera around the center of the scene.

Technology

  • C++
  • Boost
  • Opengl 2.0
  • Glew
  • CMake
  • Microsoft Visual Studio 2010
  • Subversion
  • Redmine
  • Windows 7 x64

Develop/Build/Test Machine Specs

  • Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz
  • 3072 Mb RAM
  • Nvidia GeForce GTX 260
  • Nvidia Driver Version: 260.99
  • Microsoft Windows 7 Professional x64

Resources

by Ruben Penalva at 20 de April, 2011 09:39 PM

26 de October, 2010

Orangemachine

Ponencia de alumnos del Máster en el Caixa Forum

Cinco alumnos del Máster en Informática Gráfica, Juevos y Realidad Virtual de la URJC narrarán el próximo día 28 de Octubre su experiencia en el mundo de los gráficos y como desarrollar un videojuego en un tiempo récord. Se contarán cosas como la creación de la historia, la elección de las herramientas apropiadas o su distribución a través de canales alternativos.

La dirección del evento será en el edificio de Caixa Forum en Madird, en el Paseo del Prado, nº 36.

Para más información:


by Pablo Quesada Barriuso at 26 de October, 2010 07:53 AM

30 de September, 2010

Gyakoo

Posting on ...

Lastly I've been posting links, status and thoughts on twitter, buzz and linkedin. It's an experiment, to try keep posting more often.

If you wish, you can follow me in twitter
http://twitter.com/gyakoo

google buzz
google profile

or linkedin
http://es.linkedin.com/in/gyakoo/

by gyakoo (noreply@blogger.com) at 30 de September, 2010 05:00 PM

13 de September, 2010

Gyakoo

Implementing a script language I

There are a lot of literature and articles about using script languages in games (lua, python, unrealscript, lisp, javascript, c# ...) or applications like 3dStudio Max, Maya, even FXComposer. In some projects I've bound the C++ code with Python or Lua (the most popular languages AFAIK), by using the language SDK or wrapping it around with boost::python or Luabind for advanced object oriented features.

To bind your application with those script languages, optimally and without memory leaks, is something which requires mid progamming skills about stack based virtual machine, reference counting objects, and sometimes a lot of C++ template stuff. Obviously, there're design issues about when, where and what is the script language used for. There's a great (and old) presentation by Tim Sweeney about their (Epic) thinking about how should be the next mainstream programming language. Slides talk about the importance to choice a well designed script language in next gen games.

Python and others languages are designed for generic purposes. Actually they're good enough for most of applications, but sometimes you need more specific features built-in in languages, like parallel and concurrency support or processes synchronization. Recently, languages like haskell, lisp or erlang are being considered because of their usefulness in concurrent environments, whether it is by functional programming or actor model paradigm.

We're working with a propietary MMO technology which uses its own script language. That language has specific keywords to synchronize client and server processes, to make remote procedure calls, to work with the server-centric data definition and objects' global states, to specify replication issues in fields and classes, and to merge classes in the way of component (behaviors) pattern, among other features (GUI, plugins, external functions, nodes ...). A language, in cases like that, which provides specific field application issues, increases productivity while technical risks are maintained low. It's a big advantage to count on it.

Several weeks ago, while I was working on my own project, at home, I decided to implement my own script language. That's a complex, titanic and unnecessary work, because is very difficult to program a better script language that existent ones, and I should to use them, but I kept thinking about it. Compiler subject has been always fascinating to me, and I started a project with some simple features in mind. Rapidly I figured out a lot of problems, specially those related with performance, but I've to say that I'm learning really useful things about compiler internals details, and to respect the work lua or python's developers have done.

At this point, I've implemented successfully a script language with an hybrid lua/python syntax and the following features:
- Stack based virtual machine
- Main language constructions (conditionals, loops, expressions, subroutines...)
- Object oriented
- Dynamic typing
- Native types: int, double, string, unicode, dictionary and list
- Binding with C++ functions
- Reference counting for objects

And currently I'm working on:
- Binding with C++ objects
- Concurrent paradigm
- Optimization
- Debugging issues

But the roadmap is very large. I'm applying extreme programming, with a little bit tech design, and doing refactoring every few steps. I'm very proud about simplicity of C++ code, actually I'm doing big efforts to achieve it, maintaining things as small and simple as possible. Also, there is not memory leaks, and binding with C++ is really simple, in fact is simpler than the others languages'. But that simplicity has a cost, performance. I'm not doing benchmarking, at least for the time being, but I suspect that optimization will be mandatory. Anyway I'm considering it while program, but without enter in paranoia mode.

I will post more technical details about how I did it in stages like lexer, parser, generating abstract syntax tree (AST), optimizing the tree, generating final stack VM code, code optimization and execution in virtual machine. Contexts/scopes are interesting to implement, and classes and objects too.

Below you've a code snippet:


Vector3 =
{
x = 0.0,
y = 0.0,
z = 0.0,

_init( _x, _y, _z )
{
this.x=_x;
this.y=_y;
this.z=_z;
}

add( o )
{
this.x = this.x + o.x;
this.y = this.y + o.y;
this.z = this.z + o.z;
}
};

suma(a,b)
{
return Vector3( a.x+b.x,a.y+b.y,a.z+b.z );
}

// -- Main code
v0 = Vector3(1,2,3);
v1 = Vector3(3,3,3);
c = suma(v0,v1);
v0.add( v1 );
if ( c.x == v0.x && c.y == v0.y && c.z == v0.z )
{
print( "Equals" );
}else
{
print( "Differents" );
}

As you can see, my approach is to use tables (dicts) like objects. This is used in Lua too, and other languages, but the difference here is I'm trying to do it in an easier way. The syntax is almost minimal, and you can invoke a table with the () operator, and when exists a constructor (I called it '_init') it is called to create a new object. 'print' is an external c++ function and you have others like 'std.execfile' or 'std.execstring', grouped.

I've created a powerful variant type which supports (via tagged union) reference objects, script code, native types, even C++ code, so, the C function 'print' is a variable in global context which is a CFunc, but you can pass it to a function, or you can overwrite it.


meta( func, param )
{
func( param );
}
doit( m )
{
m(print, 3);
}

doit( meta );


About the final stack based machine code, below you have the extensive code corresponding to the first snippet. Explaination in next posts:

[CODE]
[Func] $00001
load _x
push this
push x
dotlv
store
load _y
push this
push y
dotlv
store
load _z
push this
push z
dotlv
store


[Func] $00002
push this
push x
dot
push o
push x
dot
add
push this
push x
dotlv
store
push this
push y
dot
push o
push y
dot
add
push this
push y
dotlv
store
push this
push z
dot
push o
push z
dot
add
push this
push z
dotlv
store


[Func] suma
push a
push x
dot
push b
push x
dot
add
push a
push y
dot
push b
push y
dot
add
push a
push z
dot
push b
push z
dot
add
lst 3
call Vector3
ret


pushtable
load $00001
store _init
del $00001
load $00002
store add
del $00002
push 0.000000
store x
push 0.000000
store y
push 0.000000
store z
poptable
store Vector3
push 1
push 2
push 3
lst 3
call Vector3
store v0
push 3
push 3
push 3
lst 3
call Vector3
store v1
load v0
load v1
lst 2
call suma
store c
push v0
push add
dot
load v1
lst 1
call
push c
push x
dot
push v0
push x
dot
eq
push c
push y
dot
push v0
push y
dot
eq
and
push c
push z
dot
push v0
push z
dot
eq
and
jz 66
push Equals
lst 1
call print
jmp 69
push Differents
lst 1
call print

by gyakoo (noreply@blogger.com) at 13 de September, 2010 08:58 AM

10 de September, 2010

Soledad Penades

A nosy look into LiveWallpapers.apk

It first seemed that the Galaxy wallpaper was implemented in C + OpenGL (with Java calls, of course). From our tests, using Canvas was not an option, since there were just too many particles for poor humble Canvas.

And it also looked like it was using the NDK, I thought upon reading this post.

Then somebody at that forum suggested they are implemented with Processing, which made me kind of laugh internally. But the very same source he used (Romain Guy’s blog post about live wallpapers) denies that and gives some details about the Android implementation:

The prototypes are written in Processing. I did port Processing to Android to run live wallpapers and performance was not on par with what we wanted, so we implemented something called RenderScript #

Digging deeper, I downloaded the /system/apps/LiveWallpaper.apk file from the phone to my computer (using the DDMS perspective from within Eclipse), uncompressed it (it’s a ZIP file in disguise) and inspected its contents to see if I could locate where was the code the guy in the first post shown. And I indeed could :-)

The .rs files (for “RenderScript”, I deduct) are all in res/raw. They have names such as galaxy.rs, grass.rs, nexus.rs and so on. And they look like this:

#pragma version(1)
#pragma stateVertex(PVBkOrtho)
#pragma stateRaster(parent)
#pragma stateFragment(PFBackground)
#pragma stateStore(PFSBackground)

#define ELLIPSE_RATIO 0.892f

#define PI 3.1415f
#define TWO_PI 6.283f
#define ELLIPSE_TWIST 0.023333333f

float angle;

/**
 * Script initialization. Called automatically.
 */

void init() {
    angle = 50.0f;
}

/**
 * Helper function to generate the stars.
 */

float randomGauss() {
    float x1;
    float x2;
    float w = 2.f;

    while (w >= 1.0f) {
        x1 = 2.0f * randf2(0.0f, 1.0f) - 1.0f;
        x2 = 2.0f * randf2(0.0f, 1.0f) - 1.0f;
        w = x1 * x1 + x2 * x2;
    }

    w = sqrtf(-2.0 * logf(w) / w);
    return x1 * w;
}

float gSpeed[12000];

/**
 * Generates the properties for a given star.
 */

void createParticle(struct Particles_s *part, int idx, float scale) {
    float d = fabsf(randomGauss()) * State->galaxyRadius * 0.5f + randf(64.0f);
    float id = d / State->galaxyRadius;
    float z = randomGauss() * 0.4f * (1.0f - id);
    float p = -d * ELLIPSE_TWIST;

    int r,g,b,a;
    if (d < State->galaxyRadius * 0.33f) {
        r = (int) (220 + id * 35);
        g = 220;
        b = 220;
    } else {
        r = 180;
        g = 180;
        b = (int) clampf(140.f + id * 115.f, 140.f, 255.f);
    }
    // Stash point size * 10 in Alpha
    a = (int) (randf2(1.2f, 2.1f) * 60);
    part->color = r | g<<8 | b<<16 | a<<24;

    if (d > State->galaxyRadius * 0.15f) {
        z *= 0.6f * (1.0f - id);
    } else {
        z *= 0.72f;
    }

    // Map to the projection coordinates (viewport.x = -1.0 -> 1.0)
    d = mapf(-4.0f, State->galaxyRadius + 4.0f, 0.0f, scale, d);

    part->position.x = randf(TWO_PI);
    part->position.y = d;
    gSpeed[idx] = randf2(0.0015f, 0.0025f) * (0.5f + (scale / d)) * 0.8f;

    part->position.z = z / 5.0f;
}

// etc

It might be baptised as RenderScript but it no doubt smells like C from a couple of miles away: #pragma’s, #define’s, struct’s and ->’s for pointing to members? You can’t help thinking it’s C, no matter how hard you try.

More deductions: either this RenderScript uses a gcc compiler in the very phone (not that unlikely since it’s a Linux system after all?) or it parses the contents of the script on loading time. Then it’s “just” a wrapper for OpenGL calls and generally cumbersome stuff such as preparing textures, vertex shaders etc (I can see something related to vertex shaders in the galaxy wallpaper, for example).

I’ve copy-pasted the full galaxy.rs source code into a gist, just in case you want to see the whole thing but don’t have a phone and a DDMS environment handy :-)

flattr this!

by sole at 10 de September, 2010 11:38 PM

02 de September, 2010

Gyakoo

A long time ago...

Hi, I'm back, after about 1 year since I wrote the last post. A lot of things has happened in my life, personal and professional.

I left the company and moved to another city where I'm currently working on a massively multiplayer online game, mainly focused to learn the Spanish language, but it's almost a traditional MMORPG eventually. It's a big project with a considerable budget, to develop in several years. I'm really excited with it.

...and I got married last July, after ten years sharing my life with a great person, who understands all my freak passions :)

From now I will try post in this blog more regularly.

by gyakoo (noreply@blogger.com) at 02 de September, 2010 04:18 PM

Something about security

Exploiting of systems is a subject of which I'd like to know more about. I think it's good to understand how avoid future hacking, but really you neither find much information on web nor books related. I've found a book which maybe could help us to improve these skills. Topics in book include:
  • Program computers using C, assembly language, and shell scripts
  • Corrupt system memory to run arbitrary code using buffer overflows and format strings
  • Inspect processor registers and system memory with a debugger to gain a real understanding of what is happening
  • Outsmart common security measures like nonexecutable stacks and intrusion detection systems
  • Gain access to a remote server using port-binding or connect-back shellcode, and alter a server's logging behavior to hide your presence
  • Redirect network traffic, conceal open ports, and hijack TCP connections
  • Crack encrypted wireless traffic using the FMS attack, and speed up brute-force attacks using a password probability matrix


And related to that, in the video below, speakers Michael Stail and Felix Domke talk about The XBox 360 Security System and its Weaknesses. They first talk about all weaknesses in old Xbox I, and one by one they're going giving technical information about how they fixed them.

by gyakoo (noreply@blogger.com) at 02 de September, 2010 05:54 AM

08 de July, 2010

Tutfanzine

Unreal Tournament 3 - 3D Buzz Video Tutorial Pack

Un conjunto de videos creados por Buzz para mostrar como utilizar el Unreal Editor:

Unreal Tournament 3 - 3D Buzz Video Tutorial Pack

Un poquito de 3d i Unreal no le hace daño a nadie.

by Toni Rodriguez (noreply@blogger.com) at 08 de July, 2010 09:05 AM

07 de July, 2010

Tutfanzine

Dingoo A320

Hay mucha gente que se obsesiona por consolas como Nintendo DS, Nintendo DSi, PSP, etc... Pues dejad que yo me obsesione por otro tipo de consolas no tan conocidas. Os presento la Dingoo A320

Primera parte


Segunda parte


Creo que hay opciones a las que nos obligan a ingerir las grandes compañías como Nintendo o Sony

Para mas información
Dingoo en WikiPedia
Si la quieres comprar ( por eBay hay de vez en cuando )

by Toni Rodriguez (noreply@blogger.com) at 07 de July, 2010 05:05 AM

06 de July, 2010

Tutfanzine

Game Editor

Ya escuché noticias sobre este proyecto, pero hasta hoy no le he echado un vistazo. Lo poco que he podido averiguar, me ha atraido mucho hasta atal punto que lo probaré.


Un framework para crear juegos 2d, y que según su web, no se necesita saber programar. Eso sí, aunque no haga falta, es posible programar scripts.

Bajo licencia GPL3, permite en caso que publiques el juego creado bajo la misma licencia, descargarlo y utilizarlo de forma gratuita.

Para Linux, MacOSX y para Windows. Solo debe descargarse el fichero .zip comprimido y ejecutar ( los linuxeros, solo debemos asignar el permiso de ejecución al fichero ejecutable ).

Demos, tutoriales, documentación y una comunidad online en forma de foro apoyan este proyecto, que yo personalmente voy a provar en Linux.

Para más información
Web oficial de Game-editor
El trailer en Youtube

by Toni Rodriguez (noreply@blogger.com) at 06 de July, 2010 01:31 PM

05 de July, 2010

Jesús de santos

The Art of Multiprocessor Programming

The Art of Multiprocessor Programming Author: Maurice Herlihy & Nir Shavit Pages: 508 Published: 2008 Multiprocessor is everywhere now. After a period of uncertainty and fear we are starting to...

by ent at 05 de July, 2010 12:36 PM

03 de July, 2010

Tutfanzine

Campeonato de España de Street Fighter IV

Capcom y Meristation traen a España la primera edición del campeonato de Street Fighter IV.

Las normas, premios y el calendario de inscripción podéis encontrarlo en la siguiente dirección

Campeonato España de Street Fighter IV

En este tipo de juegos soy de los mas torpes que pueden existir en la faz de la Tierra...

by Toni Rodriguez (noreply@blogger.com) at 03 de July, 2010 08:44 AM

08 de June, 2010

Rubén Penalva's blog

Test: Task based Flock Simulation

Click here to view the embedded video.

Features

  • Flock simulation using tasks in order to keep busy all the cpu cores. It uses the Vista Pool Thread API to make a really simple wrap for send multiple tasks to the pool. The video shows how most of cpu cores (hardware threads) are not working under a heavy load of work with only one task in the pool. If the work is spread across multiple tasks, the video shows how all the cpu cores are busy.

Downloads

Report

After seeing the gdc10 intel talk about tasks using the vista thread pool api,  I wanted to give it a try. So, the objective of this test is just try the thread pool api that vista provides. I dont try to get a massive amount of geometry on screen, just have something cpu intensive and appealing like a flock simulation algorithm.

Controls

  • Left click plus mouse movement to rotate the camera around the flock.
  • Right click plus mouse move up/down to zoom in/out.

Technology

  • C++
  • Boost
  • Opengl 2.0
  • Qt
  • Freeglut
  • Glew
  • Microsoft Visual Studio 2008 Professional Edition
  • Subversion
  • Redmine
  • Windows 7 x64

Develop/Build/Test Machine Specs

  • Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz
  • 3072 Mb RAM
  • Nvidia GeForce GTX 260
  • Nvidia Driver Version: 196.21 WHQL
  • Microsoft Windows 7 Professional x64

Resources

by Ruben Penalva at 08 de June, 2010 11:15 PM

05 de May, 2010

Soledad Penades

Messing with OpenGL ES (in Android)

The emulator vs the physical machines

  • gl.glLineWidth is ignored in the HTC Magic (all lines have width = 1.0), whereas it is honoured on the emulator
  • it also seems like the emulator performs some sort of polygon clipping instead of culling triangles when at least one of the vertexes is out of the frustrum — so you get different output in some cases

Drawing text with OpenGL ES’ glDrawTexfOES vs the classic OpenGL orthogonal view methods

There’s no need for setting an orthogonal view when using glDrawTexfOES for drawing text into the screen, since it seems to be ignoring any existing view or projection matrix and simply drawing into the screen buffer (and that’s probably why it is so fast!).

So no more structures like this:

gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glPushMatrix();
gl.glLoadIdentity();
gl.glViewport(0, 0, canvasWidth, canvasHeight);
gl.glOrthof(-halfCanvasWidth, halfCanvasWidth, -halfCanvasHeight, halfCanvasHeight, 1.0f, 200.0f);

// draw text here
               
gl.glPopMatrix();

It will get reduced to just…

// draw text here

Interestingly though, if you’re using fog you’ll need to turn it off or you may not see the text. So we’ll end up with this:

gl.glDisable(GL10.GL_FOG);
// draw text here

Modifying the buffers after they have been created

In classic OpenGL immediate mode we use glBegin/glEnd liberally. But we can’t keep on going on like that with OpenGL ES: we are forced to convert our glBegin/glEnd calls to the glDrawArrays or glDrawElements style.

I believed that this would derive in only being able to show [boring] static geometry, but I have been messing with buffers and found out that you can for example modify the vertex buffers once they have been allocated and the data put into them. So you can not only do this:

ByteBuffer bb;

bb = ByteBuffer.allocateDirect(vertices.length * 4); // 4 bytes per value
bb.order(ByteOrder.nativeOrder());
mVerticesBuffer = bb.asFloatBuffer();
mVerticesBuffer.put(vertices);
mVerticesBuffer.position(0);

but you could even do this afterwards:

for(int i = 0; i < mVerticesBuffer.limit(); i++)
{
        mVerticesBuffer.put(i, (float)(Math.random() - Math.random()));
}

Or in other words: buffer[index] = value is buffer.put(index, value) in buffer terms.

I haven’t tried adding more elements (the above example doesn’t add more, just replaces the current vertex values with randomized ones). The performance doesn’t seem to plummet (FPS counter shows a decent 57-60 fps) when changing all 24 vertices in my test mesh, in every frame. But I haven’t tried with larger models. And I’m not sure about the possible concurrency issues that might arise either. So it’s up to you if you want to use this — it feels a bit hackish to me :D

by sole at 05 de May, 2010 10:23 PM

16 de April, 2010

El hombre alto

Trip to Kenya

I didn't tell most people, but on April 1st I went on a 10 day trip to Kenya. I'm planning to upload here a good portion of the nearly a thousand photos we made during the trip, but until then, here's a good one to show that IT-related services is never the best paid career. Not even down there ;-)

IMGA0061_2.JPG
And here's an image of an absolutely beautiful place on the delta of the Ramisi river, south of Mombasa. The guy in the image is me, running in that crystal clear, mildly-warm water. That beach is an island that disappears when the tide comes up. All white sand and no-one else but ourselves in the island. I just loved that place.

IMGP1330.JPG
When I have some more time, I'll create a gallery with loads and loads of photographs of that extremely beautiful country.

by Jon Valdés Furriel at 16 de April, 2010 04:56 PM

26 de March, 2010

El hombre alto

GPU Raymarching with Distance Fields

These last two weeks I've been pretty distracted with personal issues, and to get back on track it always helps me to start a small personal project in which I experiment something I've never done before. So here we go: GPU Raymarching using Distance Fields.

This project is completely based on the work of Iñigo Quilez, the great IQ from rgba. He put some slides in his website explaining how to do this kind of rendering, and after reading them I just had to try it for myself.

If you want to read more, just go here: 

And now, time for some videos:



 

I already have another build with more shapes and weird things, but it'll have to wait until I get distracted again ;-)

by Jon Valdés Furriel at 26 de March, 2010 10:13 AM

03 de March, 2010

Soledad Penades

Seen, gone.

Seen, gone.” is my first (serious) incursion in Android development. Yeah!

As the description says:

Take a picture, watch it morph into something different – yet related to its true origin. And before you can blink twice, it’s gone, destroyed by the very same hands that created it.

To escape from the usual demoscene non-interactive demonstrations, I decided to do something interactive but that still used a bit of processor power, so that I could see what could the platform do. I had already tried to do some audio stuff, but the results were a bit disastrous. I might come back to that field again; maybe I will be more inspired or I will know how to do things ‘the proper way’ and it will end up being a more satisfying experience.

For this, I began using Canvas and only integer math to speed things up but the results were horrible; using Canvas for this was just too much and there weren’t available cycles for anything else. It was unacceptably jerky. I even showed the app to my favourite betatester and he told me that he would uninstall the application immediately.

Since I was determined to improve things, I watched the mighty session by Chris Pruett at past year’s Google IO and understood why things weren’t quite working the way I expected them to do. After much cursing myself for not having watched the presentation before, I replaced Canvas with OpenGL ES –in which I still miss good old immediate mode, but hey… it’s way faster!– and float calculations (to my surprise, you can even afford a few float operations!), plus reorganized pretty much everything, and rewrote the rest. Core calculations could probably be optimized with native C code but I didn’t want to limit myself to non-portable code yet. Although… are there any Android devices which are not ARM based? Heh!

It’s been a very instructive experience; I’ve learnt a lot doing this –the Garbage Collector and I have become almost close friends, so to say– and obviously it will help me to create more Android applications in the future.

But in the meantime, there’s another demo waiting to be finished!

And yes, this app is what I wanted to finish a couple of days ago, just in case you missed that post.

by sole at 03 de March, 2010 11:29 PM

Rubén Penalva's blog

Test: CUDA Volume Raycasting

Click here to view the embedded video.

Features

  • CUDA based application showing gpu volume raycasting using single pass Stegmaier et al. technique.

Downloads

Report

The cuda raycasting implementation is the same approach as the Stegmaier one but with some minor changes and simplifications:

  • CUDA kernel
  • The volume is a cube: width, height and depth are all the same.
  • Proxy geometry (the six quads or the cube) is normalized and translated so the center its the same as the center of the scene.

The intersection code is really unoptimized. It’s just a straightforward implementation of the intersection ray-aabox function shown in “Real time collision detection” by Christer Ericson. I would suggest you to see the implementation of this function within the nvidia sdk volume render sample .

Controls

  • Left click plus mouse movement to rotate the camera around the volume.
  • Right click to show the context menu.
  • Middle click plus vertical movement to increase/decrease the density window width.
  • Middle click plus horizontal movement to move right/left the density window.

Technology

  • C++
  • Opengl 2.1
  • CUDA
  • Glut for Win32
  • Glew
  • Microsoft Visual Studio 2008 Professional Edition
  • Subversion
  • Redmine

Develop/Build/Test Machine Specs

  • Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz
  • 3072 Mb RAM
  • Nvidia GeForce GTX 260
  • Nvidia Driver Version: 196.21 WHQL
  • Microsoft Windows 7 Professional x64

Resources

by Ruben Penalva at 03 de March, 2010 12:02 AM

09 de February, 2010

Rubén Penalva's blog

Test: GPU Volume Raycasting

Click here to view the embedded video.

Features

  • Opengl based application showing gpu volume raycasting using single pass Stegmaier et al. technique.

Downloads

Report

The gpu raycasting implementation is the same approach as the Stegmaier one but with some minor changes and simplifications:

  • GLSL shaders
  • The volume is a cube: width, height and depth are all the same.
  • Proxy geometry (the six quads or the cube) is normalized and translated so the center its the same as the center of the scene.

Controls

  • Left click plus mouse movement to rotate the camera around the volume.
  • Right click to show the context menu.
  • Middle click plus vertical movement to increase/decrease the density window width.
  • Middle click plus horizontal movement to move right/left the density window.

Technology

  • C++
  • Opengl 2.1
  • GLSL
  • Glut for Win32
  • Glew
  • Microsoft Visual Studio 2008 Professional Edition
  • Subversion
  • Redmine

Develop/Build/Test Machine Specs

  • Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz
  • 3072 Mb RAM
  • Nvidia GeForce GTX 260
  • Nvidia Driver Version: 196.21 WHQL
  • Microsoft Windows 7 Professional x64

Resources

by Ruben Penalva at 09 de February, 2010 09:45 PM

06 de February, 2010

Jesús de santos

Code Bloat Hunting

I have dedicated the last few days of work to face a problem that is getting bigger and bigger. Although we have a quite modular codebase, use interfaces whenever possible to hide implementation...

by ent at 06 de February, 2010 12:39 AM

04 de February, 2010

El laboratorio del Dr. Txap

Tuber’s Two Step de Chris Wedge

A pesar de haber impartido un par de veces una ponencia sobre la historia de los gráficos por ordenador en el cine, uno debe ser humilde y reconocer que es imposible saberlo todo sobre un tema; siempre se queda algo en el tintero, y cuando menos te lo esperas aparece uno de los blogs amigos a enseñarte algo nuevo.

En este caso, nuestro contrabandista de Moonfleet preferido nos muestra el primer corto animado de Chris Wedge. Se llama Tuber’s Two Step y es de 1985.

Para situarnos en contexto, por aquellos años Pixar se estaba formando como tal y, aunque bajo el ala de George Lucas ya habían sacado André and Wally B. (1984), aún faltaba un año para que sacaran su primer corto como empresa independiente: Luxo Jr.

Chris Wedge se empezó a dar a conocer en el mundo de los gráficos muchos años más tarde, cuando ganó el Oscar al mejor corto animado por Bunny en 1998. Este corto sí lo incluí en la historia de la animación por ordenador por sus avances en el renderizado del pelo de los animales, algo que Pixar no había conseguido ni en Toy Story ni en Bichos. Más tarde Wedge aprovecharía esta técnica en los animales que creó para su primer largo hecho con su propia compañía: Ice Age (2002).

Les dejo con el corto, que no aporta gran cosa más que su valor histórico:

by txapulin at 04 de February, 2010 02:25 PM

11 de January, 2010

El laboratorio del Dr. Txap

The Third and the Seventh

Alex Roman es un artista que se ha tomado un par de años sabáticos y en este tiempo ha hecho un corto alucinante. Véanlo primero, y luego comento algunas cosas.

The Third & The Seventh from Alex Roman on Vimeo.

Hasta el minuto 6 ó 7, cuando empiezan a aparecer las esferas de agua y los pétalos al viento, estuve convencido que estaba filmado (real-life footage le llaman en english). Incluso después pensé que estos trucos estaban hechos con una excelente composición. Eso me pasa por mirar el video antes de leer sobre él (lo cual no es malo, por cierto). Fue luego que leí la entrevista que le hacen al artista en dimensión 2.5. Lo más impresionante es que ¡es todo cg! Lo ha hecho con 3D Studio Max y VRay (y otros programas para la postproducción).

Dice en la entrevista que todavía está en paro. No creo que sea por mucho tiempo, porque ya he visto este video correr por varios foros en inglés.

by txapulin at 11 de January, 2010 02:43 PM

19 de December, 2009

Orangemachine

PFM – Burning and Crumpling Paper – Difusión del Calor

Hola planet!

HeatSolver2D Demo

HeatSolver2D Demo

Después de un periodo de vacaciones y trabajos varios he retomado el proyecto.

He terminado unas tareas que tenía pendientes referentes a la difusión del calor en 2D.

La representación del papel es un sistema masa-muelle. Este proceso irá quemando los nodos y los muelles conectados se irán contrayendo para simular las arrugas del papel.

De momento solo tengo el proceso de difusión y una deformación simple, reduciendo los muelles un epsilon. Aunque está lejos del resultado final, tiene pinta de que vamos por el buen camino :) y motiva a seguir trabajando y compartiendo ideas.

También he creado una sección para ir colgando material relacionado con el proyecto.

Seguimos en contacto!


by Pablo Quesada Barriuso at 19 de December, 2009 03:24 PM

18 de December, 2009

El laboratorio del Dr. Txap

Alma de Rodrigo Blaas

Otra de las maravillas que pude ver en el festival de animación del SIGGRAPH.

Alma from Rodrigo Blaas on Vimeo.

Vía cg-node.

by txapulin at 18 de December, 2009 11:38 AM

12 de November, 2009

El laboratorio del Dr. Txap

Pigeon: Impossible

Éste lo vi en el festival de animación del SIGGRAPH. Es bueno que vayan apareciendo…

Gràcies, Ignasi.

by txapulin at 12 de November, 2009 03:23 PM

06 de October, 2009

Shash Final Project Diary

Technical details of implementation

After the general ideas, I want to talk about the technical details of the project implementation. First of all, I'm mainly an OpenGL coder, I've been using the API for almost a decade now, so I'm quite used to it. Also I'm quite used to coding all the stuff that is rationally doable myself: 3D mesh exporters/importers, file formats, parsers, etc. As I see the final project as a learning exercise, I wanted to try something different.

First, I'll be using Direct3D 9 or 10: I'm not sure of the capabilities that Direct3D 9 offers, so maybe I'll have to use some stuff that is Direct3D 10 level. Whenever I can check of the full Direct3D 9 capabilities I'll know, I'm too used of working with OpenGL, where higher requirements don't mean changing the version of the API, just another extension.

For the 3D mesh/scene file format, I'll be using Collada. The reason is quite simple, it's got exporters already written from 3dsmax and Maya (the two applications I know best), it's plain XML (so I can write a parser, and in the process learn about the schema) and it's meant to be a industry standard (that's the least important reason, but seems plenty of people/companies are using it as exchange format between the 3D package, tools and final format).

As for the math and base code, I'll use modified (mainly simplified) versions of those that I use for my personal projects, as I won't be needing all the stuff I've coded over the years (or I hope so!).

Also, it's worth noting that I already started the project, in fact it was started 3 weeks ago! As of now, I've the first draft of the Collada loader, an a very simple Direct3D encapsulation. In the upcoming days, I'll be uploading screenshots if I do something worth posting, and will start detailing the four shading techniques that I'll implement.

by shash (noreply@blogger.com) at 06 de October, 2009 06:27 PM

01 de October, 2009

Neurogence

An AI's application in my daily work?

Well, last months we've here a big problem about our daily technical work. As you possibly already know (if you read my another blog), I'm working in a big system which automatizes all our Software Quality Assurance (SQA) procedures and test cases for our (complex, have to say) products.We always have a issue related with interface's dependent test cases. Basically, they're scripts that perform

by gyakoo (noreply@blogger.com) at 01 de October, 2009 06:00 PM

23 de September, 2009

Shash Final Project Diary

Initial ideas

Well, as part of my final project at the university, I wanted to make a diary with plenty of screenshots and as a mean to see how much the finished project changed from the initial ideas. Let's get to explain what I'll be doing in the next months.

Over the past years I've devoting both my personal and professional time to 3D related coding, including, but not limited to, software/hardware rasterizers, raytracers or related tools. I've also toyed with non PC hardware quite a lot, as I've coded for the Playstation 1, GBA, DS and PSP (the latter two to a large extent). As such, it was a natural choice doing my final project on something related to 3D.

Over the past year, I've seen a lot of times comparisons between the different game rendering techniques: I mean how the problem of illuminating surfaces with several different lights is accomplished. First, the discussion is between forward and deferred rendering, not between several less memory heavy deferred rendering approaches. As of now, I've done an implementation of both forward lighting and deferred lighting, but both engines had a very different target (and test scenes). What I want to do now, is to test several different approaches on the same test scenes and be able to compare them in the same environment.

So, let's sum it up, I want to implement the following 4 techniques:
  • Forward rendering (probably multi-pass, and not multi-light übershaders)
  • Deferred rendering (the old big GBuffer approach)
  • Pre-light pass (also know as deferred lighting)
  • Light indexed rendering
I'll mainly focus my work on getting all renderers to show all scenes to a certain degree of fidelity, even if at the cost of performance: if the scene is not meant to perform well on one of the techniques, I won't be doing any quality downgrades on the renderer (for example, dropping lights or transparency).

This is really important, as I want to focus on accurately benchmarking all of them and getting a fair comparison of them on a wide range of scenes. The main problem of my tests will be that I'll probably only be using a PC (not a PS3 or a Xbox360), which won't give a industry level comparison, but I don't have access to that hardware now, and even if I had, access to the PS3 GPU is not possible without a devkit, which is way out of my budget :P

To sum it up, I'll be doing a benchmark of different rendering techniques, let's start the ride :)

by shash (noreply@blogger.com) at 23 de September, 2009 08:51 PM

Neurogence

Welcome

Neurogence is an attempt to compile a collection of articles, techniques, methods and ideas about Artificial Intelligence. In this website we'll post some of advances and news in AI, interesting books, useful links, and areas where AI is currently in use, as well as a few descriptions, myths and definitions.Also, here we'll challenge to anyone who wants to share AI algorithms for specific

by gyakoo (noreply@blogger.com) at 23 de September, 2009 04:56 AM

Computer vision, pattern recognition and hot dogs

Is impressive how the flex-pickers recognize and classify the hot dogs.There are a lot of variables to take into account as well as recognition of forms, robotics, IK, the conveyor belt, optimization to select the best place where to put the hot dogs ... all in realtime. You can see how some pieces can't be processed, but surely they're used to feed back the pipeline.

by gyakoo (noreply@blogger.com) at 23 de September, 2009 04:55 AM

Fantastic AI

In the middle of 2005 I started to work in a company called Gextech where we were developing for 3 years, a non-interactive, bet-oriented soccer game: Fantastic League. I was the AI senior programmer there, and I'll try to explain how we did it.It was interesting and motivating for us. One of the challenges was to create a sort of "artificial intelligence" for football players. I say "sort of"

by gyakoo (noreply@blogger.com) at 23 de September, 2009 04:55 AM

09 de August, 2009

Historías de un coder

Puños fuera!

Hace unos días estuve en casa de un amigo que acaba de tener un hijo (técnicamente su pareja, pero ya se entiende). Hacía casi dos años que no nos veíamos, aunque hace mucho que nos conocemos: al irme de Barcelona, habíamos perdido el contacto. Fui a su piso, conocí a su hijo (que entonces hacía 7 días exactos que había nacido) y me invitaron a comer. Su madre preparó unas de las paellas mas espectaculares que puedo recordar. Compartieron lo que tenían conmigo, de forma generosa.

Cuando era pequeño, solíamos ir, con mis padres y los compañeros del club excursionista, bastante de camping. Allí, casi siempre que comíamos se hacia en comunidad, se compartía la comida con todos, y nadie abusaba comiéndoselo todo ni nada parecido.

Y porque cuento todo este rollo personal, cuando os importa un pepino? Pues porque al final de este post hay el código de la ultima prod que hemos hecho slack y yo. He limpiado un poco el código, y ahora debería requerir menos GPU, pudiendo funcionar en aquellas tarjetas que no soporten GLSL 1.2 (o OpenGL 2.1 completo, si lo preferís). Ademas, he reducido el tamaño de la prod a la vez que he añadido soporte decente para resoluciones diferentes y para esconder el ratón.

No he añadido contenido ni he corregido el que había, prefiero trabajar en nuevas prods que no invertir tiempo en esta: únicamente sacamos versión final porque ha sido un trabajo derivado de limpiar el código para publicarlo. De hecho, al poco de publicar este post estaré empezando la nueva prod. Ademas he publicado versión final de la 4k:

- otopoto / Collapse & Gatitos (versión final)
- otopoto / Collapse & Gatitos (código fuente)

Preguntas, insultos y correcciones serán bienvenidas.

by shash (noreply@blogger.com) at 09 de August, 2009 09:45 PM

Nueva 4k

Pues eso, hemos terminado una nueva 4k. Las criticas no han sido buenas, y quedamos segundos. Ademas, para añadirle insulto, es la 4k a la que posiblemente he dedicado mas tiempo. Vaya, un fiasco, no? No creáis. Voy a contar porqué.

Hace 2 años exactos, decidí dejar de producir. Acababa de volver de la Euskal, habíamos ganado la competición de 4k, y yo solo podía sentir frustración por la producción con la que habíamos ganado: mucho material reutilizado y hecha con desgana. El hecho que ganara solo añadió insulto al asunto. Ya entonces consideraba seriamente que no producía al nivel que podía hacerlo, al menos en lo que respecta a técnica. Hacer cosas abstractas esta bien una temporada, pero después de unos años...

Decidí dejar de producir hasta que no pusiera todo mi empeño en una producción. Hace algo menos de un año empecé con la versión final de la Let yourself go, ya que creía que merecía un poco de amor antes de olvidarla para siempre. La idea era pillar carrerilla en algo orientado a la demoscene, y luego empezar algo nuevo. Siempre con la idea de volver a producir con ganas, y dar lo que pudiera, al menos a nivel técnico.

Y aunque el resultado de la otopoto no sea el que tenía en la cabeza, y siendo consciente que había muchísimas cosas por pulir, puedo levantar la cabeza alto y sentirme orgulloso de haber trabajado en ella a consciencia. Obviamente, el resultado artístico deja que desear, pero técnicamente tiene detalles interesantes. En la próxima tengo que recordar centrarme mas en la parte artística, como hacía con las producciones mas abstractas.

Solo para notar como las prisas finales hicieron recortar en calidad, comparad los 2 shots siguientes. El primero es el de la prod a una semana de la party, el segundo de la versión presentada en la party:


No mucho mas que comentar al respecto, si alguien quiere mas detalles, que comente y le responderé lo mejor que sepa.

A parte, en esta euskal también di una charla sobre 4k. Hubo cosas que funcionaron muy bien y otras que no. A parte, estaba algo nervioso, pues la sala estaba MUY llena (50-70 personas) y no había ensayado la charla tan a fondo como hubiera querido. Tenéis, de momento, el audio y las diapositivas usadas aquí. A final de verano saldrá el vídeo de la charla, cuando esté disponible ya lo comentaré por aquí.

by shash (noreply@blogger.com) at 09 de August, 2009 09:45 PM

28 de July, 2009

Jesús de santos

The Documentation Challenge

Documentation is the part of the development process where usually less time and money is invested. Few resources implies a poor infrastructure for something that, as the project gets bigger and...

by ent at 28 de July, 2009 07:58 PM

03 de July, 2009

Historías de un coder

Hoy, snippets cortos de código

Viendo como OpenGL va a deprecar parte del API (cosa que me parece bien, a ver si conseguimos mejores drivers!), y la costumbre de programar cosas de mas que tenemos algunos, he creído que alguien le seria útil. Funcionan 100% igual que las funciones de la API (misma matriz, etc). Empezaré por el mas trivial (la implementación es directa respecto a la documentación), crear una matriz de proyección ortográfica, con los mismos parámetros que gluOrtho:

   1:  CMatrix4x4 CreateOrtographicProj (float left,   float right, 
   2:                                    float bottom, float top, 
   3:                                    float Near,   float zFar)
   4:  {
   5:   CMatrix4x4 result;
   6:
   7:   float  tx = -(right+left)/(right-left),
   8:          ty = -(top+bottom)/(top-bottom),
   9:          tz = -(zFar+zNear)/(zFar-zNear);
  10:
  11:   result.Set (2.f/(right-left), 0.f,              0.f,               tx,
  12:               0.f,              2.f/(top-bottom), 0.f,               ty,
  13:               0.f,              0.f,             -2.f/(zFar-zNear),  tz,
  14:               0.f,              0.f,              0.f,               1.f);
  15:
  16:   return result;
  17:  }

Como apunte, en todos los snippets de codigo usan ciertas clases matemáticas sencillas que uso, en esta la clase matriz cuadrada de 4 elementos. Si hay alguna duda sobre esto, comentadlo y expando los detalles sobre ellas. A efectos prácticos, podéis suponer que CMatrix4x4::Set (...) es equivalente a ir asignando a un array de floats de 16 elementos: el primer parámetro seria el primer elemento del array, el segundo parámetro el segundo elemento, etc.

En segundo lugar, proyección en perspectiva, equivalente a gluPerspective:

   1:  CMatrix4x4 CreatePerspectiveProj (float fovy,  float aspect, 
   2:                                    float zNear, float zFar)
   3:  {
   4:   float f    = tanf (((fovy/180.f)*(float)M_PI) / 2.0f);
   5:   float div  = (zNear-zFar);
   6:
   7:   f   = IsFloatEqual(f, 0.f) ? FLT_MAX : 1.f / f;
   8:   div = IsFloatEqual(div, 0.f) ? FLT_MAX : 1.f / div;
9:
  10:   CMatrix4x4 result;
  11:
  12:   result.Set (f / aspect, 0.f,   0.f,              0.f,
  13:               0.f,          f,   0.f,              0.f,
  14:               0.f,        0.f,   (zFar+zNear)*div, (2.f*zFar*zNear)*div,
  15:               0.f,        0.f,  -1.f,              0.f);
  16:
  17:   return result;
  18:  }

A comentar, la macro IsFloatEqual solo compara dos números en coma flotante: el método normalmente mas recomendado (pero menos rápido, obviamente), es restarlos, coger el valor absoluto, y comparar si es menor que cierto epsilon. Esto se hace así debido a que por precisión de los numeros en coma flotante, comparar con numeros exactos (por ejemplo, haciendo float == 0.0) es desaconsejable.

Finalmente, el que tiene mas curro, el gluLookAt (sobretodo, porque la documentación obvia ciertos detalles):

   1:  CMatrix4x4 CreateLookAt (const CVector3 &eye,
   2:                           const CVector3 &center, 
   3:                           const CVector3 &up)
   4:  {
   5:   CVector3 f      (center-eye);
   6:   CVector3 upLocal(up);
   7:
   8:   f.Normalize();
   9:   upLocal.Normalize();
  10:
  11:   CVector3 s = f ^ upLocal;
  12:   CVector3 u = s ^ f;
  13:
  14:   s.Normalize();
  15:   u.Normalize();
  16:
  17:   CMatrix4x4 result, translate;
  18:
  19:   result.Set ( s.x,  s.y,  s.z, 0.f,
  20:                u.x,  u.y,  u.z, 0.f,
  21:               -f.x, -f.y, -f.z, 0.f,
  22:                0.f,  0.f,  0.f, 1.f);
  23:
  24:   translate.SetTranslation (eye*-1.f);
  25:
  26:   return result*translate;
  27:  }

A ver, destacar de este snippet, que el operador^ de la clase CVector3 equivale a hacer un producto vectorial (cross product), que el método Normalize hace lo inferible del nombre (es decir, normaliza el vector usando su modulo), y que el método SetTranslation de la clase CMatrix4x4, simplemente asigna a una traslación a la matriz (en este caso, al ser una matriz identidad, simplemente creamos una matriz de traslación).

No he explicado a fondo que hace cada parte, para eso tenéis los links a la documentación de OpenGL, y si hay mas preguntas mejor dejad comentarios.

La licencia de este código es la obvia y clásica haced lo que os dé la gana con él. Si encontrais algun bug, comentarlo y aprendemos todos de ello :)

by shash (noreply@blogger.com) at 03 de July, 2009 09:55 PM

15 de May, 2009

Historías de un coder

Volviendo a empezar, poco a poco

Hacia mucho que no escribía por aquí. El ultimo post quería decir que vuelvo a verme motivado para producir demos. Aunque muchos ya lo saben, me tomé un descanso porque noté que no producía lo mejor que podía, y no quería seguir creando productos sub-par. No creo que todas mis producciones sean mierda, ni de lejos, pero la ultima 4k, la forma de hacerla (la casi nula intención por crear algo de calidad), fue la razón que decidiera parar.

Durante el parón (y antes de él) me he visto envuelto en bastantes proyectos, algunos de ellos públicos, muchos de ellos privados, que solo han visto las pocas personas en las que confío para mostrar mis trabajos en progreso. Por eso, hoy quiero hacer un poco de resumen, con mas pantallazos que texto. Al fin y al cabo, nadie lee los blogs, para que escribir :P

Me gustaría, pero no sé si conseguiré, que hubiera preguntas respecto a los proyectos. Estoy muy abierto a dar toda la información posible y ayuda. No soy muy partidario de dar código a espuertas, pues creo que coger el vicio de copiar código por sistema es malo. Aprender a hacer algo basado en una explicación concisa me parece mucho mas didáctico. Así pues, preguntad, y intentaré dar todo mi (limitado) conocimiento.

Nada más, empezaré con los visores de formatos de geometría de juegos. Basicamente son cargadores del formato que usan ciertos juegos, tanto sea en sus modelos como en los mapas en si. Luego hay unas cuantas pantallas de mis colaboraciones en emuladores. Por cierto, los shots no están en orden cronológico, sino quedaba algo desestructurado, si alguien quiere saberlo lo comento.


Quake 1 / Quake 2




Quake 3




Portal / Half life 2
(mismo engine porque es el mismo formato)




Visor de modelos del Half Life 2
(lo programé a parte y luego lo integré en el engine de arriba)




Visor de modelos del Doom 3
(también tengo hecho un cargador de mapas, pero no tengo shots a mano)



Visor de modelos del Crysis




Port del mi motor de Quake 3 a DS
(corriendo sobre emulador, también corre en el hardware real)




Port del mi motor de Quake 3 a PSP




Desmume (emulador de DS)
(Colaboración, principalmente, trabajo en el core 3D, pero también en la CPU/2D/optimización)





jpcsp (emulador de PSP)
(Colaboración, principalmente trabajo en el core 3D)



Y esto es todo lo "importante" a mencionar. Contando que estuve activo en la demoscene hasta Julio del 2007, tampoco está tan mal. Por supuesto, podría haber hecho más, pero mucho tiempo se dedicó al emulador de DS, cuyo desarrollo fue muy complejo.

A parte, a ratos voy trabajando, como todo coder gráfico, en un engine 3D, del cual me guardaré shots para otra ocasión.

Nada más que contar ni mostrar por hoy!

by shash (noreply@blogger.com) at 15 de May, 2009 10:59 AM

11 de May, 2009

Luanatic

Welcome to Codepixel’s planet

Just to start a new tag “codepixel” :)

The whole planet here

by PpluX at 11 de May, 2009 07:02 AM

02 de February, 2009

Orangemachine

Modelado de Personajes – Character Setup

En este proyecto hemos seguido el pipeline para la creación y animación de personajes. El objetivo era crear un modelo, con esqueleto, músculos, pelo, ropa y animación facial. Como resultado hemos creado una animación de 20 segundos.

Play the video

Play the video (external link)

Estoy bastante contento con el resultado. He aprendido muchas técnicas y trucos, y lo más importante, el trabajo que lleva hacer un personaje :D .

Uno de los pasos más costosos fue ajustar los pesos que influyen en los vértices cuando el esqueleto se mueve. Leyendo en el foro de CG Society, los profesionales dan de 4 a 6 pasadas para obtener un buen resultado.

Agradecimientos
Caroline Larboulette and Olivier.

Algunos screenshot durante el desarrollo y producción:

skeleton-orange-model-15 skeleton-orange-model-20 skeleton-orange-model-28 skeleton-orange-model-34 skeleton-orange-model-35 skeleton-orange-model-49 skeleton-orange-model-46 orange-model-2 orange-model-1 orange-model-3 orange-model-4 orange-model-5

by Pablo Quesada Barriuso at 02 de February, 2009 03:40 PM

09 de January, 2009

Viento fuerte

Simulación de olas


En este proyecto se resuelve la ecuación de transporte convectivo con difusión en 2 dimensiones, reproduciendo una onda que se propaga a través de un dominio rectangular a la vez que se va amortiguando,haciendo uso de un malla bidimensional generada mediante diferencias finitas.
Se han parametrizado todos los valores de configuración, como la velocidad de refresco, el factor senoidal, las condiciones de contorno o la longitud del dominio, con el fin de facilitar su uso en tiempo de ejecución y que de esa manera sea más sencillo evaluar las condiciones de estabilidad (atendiendo sobre todo a los términos de Courant y D*).


by vientofuerte at 09 de January, 2009 02:20 AM

APO HomeWork 3


Aquí tocaba jugar un poco con animación Skelética (bones, smooth deformation, rigging …) y para endulzar un poco el video, he utilizado un plugin de generación de fuego en el que estaba trabajando.

by vientofuerte at 09 de January, 2009 02:15 AM

APO HomeWork 2


Mediante este trabajo se aplican los algoritmos vistos en clase sobre deformaciones, se han aplicado entre otros volumens de revolución, twist, taper y free form deformation. Además he jugado un poquito con sistemas de partículas y naturalmente keyframes para fabricar la animación.
Influencias:Clipper de fresa (refresco riquísimo de mi tierra) Dead Note, serie anime altamente recomendable, de donde se ha extraido parte de la BSO.-> (Clipper de fresa + Dead Note) = Clipper Note :) .

by vientofuerte at 09 de January, 2009 02:09 AM

Trazador de rayos


Este proyecto es una toma de contacto con los métodos de iluminación global, para la que se ha desarrollado un trazador de rayos muy simplificado, en lenguaje Java, partiendo de un pequeño framework con las funcionalidades básicas que no son de trazado de rayos (importación de ficheros, generación de imágens …), con el fin de centrar los esfuerzos en lo que es en si desarrollar un raytracer.
Estas son algunas de las “features” que posee nuestro trazador de rayos:

  1. Algoritmicas
    • Trazador de rayos básico
    • SuperSampling
    • Sombras
    • Reflexiones
  2. Geométricas
    • Esferas
    • Triángulos
    • Toroides
    • Cubos alineados a los ejes
  3. Materiales
    • Lambertiano (mate)
    • Phong
    • ShinyPhong
    • Transparente
    • Refractario
  4. Luces
    • Luces puntuales: Permitiendo atenuación con la distancia
  5. Optimizaciones
    • Uso de bounding-boxes alineados a los ejes

El team para este proyecto hemos sido: Pablo Quesada Barriuso, Ricardo Suárez Mesa y un servidor.

Agradecimentos a JJ: “Cuando todo falla, lo mejor es volver al origen”.

by vientofuerte at 09 de January, 2009 01:53 AM

22 de November, 2008

Orangemachine

Animación Avanzada – Simulación de Olas

Siguiendo con la serie de trabajos realizados en el Máster de Informática Gráfica, el siguiente ejemplo consiste en resolver la ecuación de transporte convectivo con difusión en dos dimensiones. De esta manera intentaremos reproducir una onda que se propaga a través de un dominio rectangular y que a su vez se va amortiguando

En general el esquema es estable para la parte de convección cuando 0 < Courant <= 1, y para la parte de difusión cuando 0 <= D* <= 0.5. Hay que recordar que cualquier método introduce una difusión “artificial” debido al propio método, y que no tiene explicación física.

En este estudio, los valores apropiados para que el sistema sea estable han sido C = 0.50 y D* = 0.25.

Downloads

- AA – Simulación Olas (rar).

Entorno de desarrollo

Framework: Eclipse CDT & Qt Integration
Code: C++, Qt 4.4.3, LibQGLViewer 2.3.1


by Pablo Quesada Barriuso at 22 de November, 2008 08:19 PM

05 de October, 2008

Vanilla Iq

Leizex

4k graphics for fun

05 de October, 2008 06:00 AM