Tampilkan postingan dengan label the. Tampilkan semua postingan
Tampilkan postingan dengan label the. Tampilkan semua postingan

The Witcher

Senin, 31 Maret 2014

0 komentar
Dont be afraid of change. Even though The Witcher may scare off some people with inventive combat that replaces comfortable old rapid-fire clicking with rhythmic sword swinging, there is no need to avoid one of the deepest, most adult role-playing games to hit the PC in years. Polish developer CD Projekt has crafted one of those landmark games that moves the goalposts for everybody, a truly grown-up take on swords and sorcery that breaks just about every fantasy tradition in the book. Once you experience a grimy medieval world so realistic that you can practically smell it, quests that reject simplistic good and evil for ambiguous "decisions and consequences," and, yes, newfangled battle mechanics that add welcome twists to left-click scrapping, youll find it awfully hard to go back to the usual D&D rip-off.

Built on a 2007 edition of the Aurora Engine that powers Neverwinter Nights, The Witcher is something of a cross between action RPGs such as Diablo and more complex plate-mail potboilers such as Neverwinter Nights. Essentially, the developers work both sides of the street. On the one hand, you have exactly one character choice in the form of greasy-haired Geralt of Rivia, the monster-hunting mercenary "witcher" of the title, along with other ostensibly dumbed-down features such as big bunches of combat and Gatling-gun-quick leveling up. But on the other hand, you also get a postwar fantasy world called Temeria that feels lived in (if not postapocalyptic), as well as plot points that involve serious moral choices. Story and setting have been borrowed from The Last Wish, a Polish fantasy novel published way back in 1990 by Andrzej Sapkowski, and for once such an adaptation has been pulled off successfully.




Although there is a fair bit of saving-the-world RPG claptrap involving a powerful evil mage and a mysterious group called the Salamanders, you deal with a lot of lowlifes. Woman-hating religious fanatics; merchants who deal in abducted children; slatternly bar wenches wholl bed down with you for a bottle of wine; witches who sell poison and play with voodoo dolls; racists who openly hate nonhumans and threaten to kill elves and dwarves. Make no mistake: Although there are a lot of traditional, Gygaxian monsters on the prowl here--barghests, wargs, ghouls, drowned undead, vampires, wraiths, wyverns, and loads of different demons--the biggest enemy that Geralt faces is always his fellow humans. Youre not much of a hero, either. Requests for assistance can be turned down. Money is always a factor, even when you decide to be a good guy and lend a helping hand. And you have no problem taking advantage of just about every woman you encounter, having pre-marital relations with a handful of babes in every act of the game despite apparently being in love with one of your fellow witchers.

It shouldnt be much of a surprise that the line between good and evil here isnt a very thick one. Everything is a murky gray. The first act is simply astonishing in how it plays out. You start off trying to track down the bad guys who raided your witcher fortress and killed one of your pals, but soon get involved in a feud that pits the religious leader and nobles of a hamlet against a witch. However, nobodys hands are clean. One merchant you deal with is in cahoots with the evil cult youre hunting. A guard you help with a ghoul problem turns out to be a rapist. The village priest youre helping cleanse the region of a demonic dog called "the Beast" is actually a misogynistic lunatic. And the witch isnt much better, given that shes sold poison used in a suicide and employed a voodoo doll to make one of the local bigwigs kill his brother. By the end of the act, in a showdown complete with burning torches and pitchforks, youre forced to choose between the woman-hating, rape-loving, cult-affiliated mob and the murdering witch. It makes the most sense to side with the witch because the villagers are an awfully sleazy lot, but doing so forces you to slaughter virtually all of them and leave their town burned to the ground.

So no, The Witcher sure isnt all sunshine and lollipops. But even though you might need a few Prozac pills to handle the games bleak tone, the story becomes incredibly compelling when you have so much riding on your actions. Characters seem like real people, not the good-evil-neutral triad of stereotypes that populate most fantasy games. Only a few aspects of the story and setting remind you that youre just playing a game.

A lot of this is probably due to poor translation from the original Polish. Dialogue seems truncated in many spots, which leaves you in the dark as to character motivations. You know something important has just taken place, and the interface clearly points out what youre supposed to be doing, but the big picture doesnt completely come together.




Swearing and bizarre word choices are another issue. One moment youre cruising along listening to fairly standard RPG conversations, and then youre hit with out-of-the-blue modern slang and "F" bombs. Its pretty jarring to hear the leader of your witcher band calling a female team member "babe," let alone to hear Geralt disgustingly grunt "Abso-f***ing-lutely!" Voice acting often lacks authority as well, which highlights these strange lines. Fellow adventurers look like grizzled warriors but sound more like high schoolers. The actor who voices Geralt tries too hard, like a kid attempting a deep, gravelly voice so he can fool the counter jockey at the corner store into selling him a six-pack. Likewise, the youngest member of your group has all the gravitas of Potsie Weber (for a reason, it soon turns out).

Interactions between the sexes are also risqué in a corny way that would rev up only Beavis and Butthead. Its ridiculous enough that the side quests in every act let Geralt get horizontal with virtually every woman he meets, but its just pathetic that each conquest is rewarded with a playing card that depicts the lovely lass in a come-hither pose. There isnt even any real payoff with these pics, either, given that the nudity that appeared in the European version of the game has been censored due to prudish Stateside sensibilities. (Thank you, Hot Coffee controversy.) At any rate, the sex is ludicrous and out of place, and is apparently there only to give game geeks hope that a fellow guy with lanky, unwashed hair and corpse-pale skin can score with hot babes.

The games mechanics are a little more reserved, although CD Projekt has tried to slightly jazz up everything that fantasy gamers take for granted. Combat mechanics are the biggest change. Instead of the traditional left-click attacks employed by virtually every other real-time RPG this side of the cult-hit Gothic series, melee fighting here is based on give-and-take combos. You click once on an enemy to begin an attack sequence, then click again precisely when the sword-swinging ends to begin a second flourish, and then again and again to string together combos. Miss your moment at any point and its back to square one.




This sounds pretty simple, but it doesnt work so well at the beginning. The game starts with few unhelpful tips on how to fight on all three difficulty settings, and on hard there is no obvious visual feedback indicating when to click again to link a second attack to your first. Youre supposed to take click cues from a twirling sound and visual indicators like a flaming sword slash, but this information is buried more than 20 pages into the manual. In order to figure things out from a hands-on perspective, you need to play on easy or medium difficulty, which removes all doubt about when to click by turning the combat icon into a flaming sword. Then you pretty quickly pick up on the visual and audio cues provided during Geralts actual fighting. When you do get used to things and want to try a more challenging difficulty setting, however, as both easy and medium are a little elementary at times (aside from some of the boss battles), you have to restart the game. Still, even with the poor introduction, its hard not to love the combat system. Battles are only a little more involved than the standard clickfest stuff, yet the mechanics always make you think about what youre doing and provide real satisfaction when you take out tough foes. Attacks also simply look cool, especially when youre jumping around slinging your sword in all directions in the middle of a pack of monsters.

Three different fighting styles as well as a skill system with more listings than the Manhattan yellow pages add to the cerebral workout. You can change your battle stance between fast, strong, and group, each of which makes you better able to handle speedy, muscular, and gangs of enemies, respectively (the last of which lets you make sweeping swings that hit multiple bad guys at once). The one catch is that these styles can be employed only while wielding witcher steel or silver swords, which makes a lot of the other weapons that you find during the course of the game pretty much useless. Each style can also be tweaked with the talent points earned every time that you level up (which happens early and often; expect to cruise beyond level 30 before wrapping Geralts adventures). All of your other characteristics can also be upgraded, from your attributes to your abilities with both types of witcher sword, as well as your aptitude for the signs that make up the games spellcasting component.

Every category has five levels, and each sports four different related skills. For example, you get started in strength by taking the basic level-one ability to buff attacks and then move on to specific proficiencies such as Cut at the Jugular, which increases enemy bleeding damage after successful attacks, or Bloody Rage, which boosts damage done by 40 percent whenever your vitality dips below 15 percent. CD Projekt even shows a bit of a sense of humor with some skills. For instance, buzz means that your attacks are improved when drunk. The only negative with the skill system is that it seems to force you into a jack-of-all-trades configuration where youre talented as both a warrior and a spellcaster. Consequently, players who like to hardcore specialize in a class are out of luck here.

At any rate, magic isnt actually as big a deal here as it is in most other fantasy RPGs. The five signs featured are fairly generic takes on the elements and the basic D&D schools of magic that let you blast off fireballs, charm enemies, set up protective globes, and that sort of thing. Basically, the signs just give you alternate attacks with the right mouse button. More mystical depth is provided by alchemy. Witchers are notoriously good with magical concoctions, and as such Geralt can acquire various recipes that let him brew up potions and oils that heal, enhance weapons, and so forth. It actually seems as if youre really cooking something up, too, because you have to meditate before an open fire (you level up and assign talent points in the same fashion). However, as with most of these brew-your-own systems in RPGs, you dont have to get too involved with the creation of your own noxious chemicals, aside from the odd quest that makes doing so a key part of fulfilling an objective.




As you might expect from the grim moments catalogued above, The Witcher is pretty dour when it comes to look and sound. The Aurora Engine has never looked better, and its hard to believe that this thing dates back to Neverwinter Nights in 2002. Landscapes are generally gorgeous, and the characters are all distinctive (if a bit cartoonish), but the graphics deal in awfully bleak scenery. Many stone buildings in the game are either run-down or falling down. Villages consist of ramshackle huts constructed with wattle and daub and topped with straw roofs. Skies always seem to be a dim steel gray, and rain pours down pretty much every other day. NPCs are filthy, and often come with various scars and minor disfigurements. There are two main camera angles, over-the-shoulder and isometric, although the former is the best choice because it provides the best perspective on everything. The controls are smooth even close-up.

Audio effects and music are perfect counterparts to the look of this shattered world. Little kids skip around while talking about death and playing crude pranks like pissing in the dwarfs bellows. Women can be overheard setting up assignations with their lovers. And all of this is surrounded with subtle, creepy tunes loaded with offbeat tones and sparse organ notes. The superb soundtrack is particularly effective at night; the gothic organ plinking under the moonlight makes you shiver like someone just walked over your grave.

Memorable story, immersive combat, fascinating characters--whats not to like? A few fit-and-finish issues mean that The Witcher isnt quite an all-time classic RPG. Regardless, its awfully, awfully close, warts and all, and it provides a new benchmark for future developers that are looking to lift their games out of the done-to-death elf-and-orc ghetto.


By Brett Todd, GameSpot
Read More..

MOBILE SUIT GUNDAM SEED DESTINY HD REMASTER Episode 50 The chosen future

Sabtu, 15 Maret 2014

0 komentar
MOBILE SUIT GUNDAM SEED DESTINY HD REMASTER - Episode 50:The chosen future 
Video via Gundam.info 



Read More..

iPhone 5s and iPhone 5c Available in the Philippines on November 15 2013

Selasa, 04 Maret 2014

0 komentar
Been wanting to purchase that shiny new iPhone 5s or maybe sport your favorite team color by getting one of the colorful iPhone 5c? Just a little more wait and you'll be able to get your hands on a subsidized unit! Very soon!
Read more »
Read More..

Rogers and Samsung and Jelly Bean 4 3 – Incompetence underscored … perhaps taken to the level of fine art … UPDATED

Senin, 03 Maret 2014

0 komentar

If you have not yet allowed your Samsung S3 to upgrade to Jelly Bean 4.3, DON’T!!!!!  My absolutely brilliant phone under Jelly Bean 4.2.2 is now a broken piece of ****.

UPDATE: I finally found a solution. I bought Helium (which used to be called Carbon) backup and backed up everything from my phone. I then did a hard reset and wiped everything. Once it came back Google restored the apps automatically and then I had Helium restore the settings. Sure enough, everything works again. But be aware, not everything comes back exactly as before. But it is mostly the same and now I have the features of Jellybean 4.3 …

Samsung have been plagued by complaints from all over the world for almost two months now, and frankly I do not see things getting better.

My main problems were (both are now working):

  • Phone will not ring. (This is kind of big.)
  • Battery dies in hours if I switch WiFi on. (I can live without it, but it is inconvenient.)
Read More..

The Leidenfrost Effect

Rabu, 12 Februari 2014

0 komentar

In the 1700s, a man named Leidenfrost discovered that at a certain temperature above the boiling point of water, drops of water stopped evaporating quickly and started bouncing around and evaporating really slowly.

I’m not sure when this effect was discovered, but if you drop water onto a sawtoothed texture, the water will move in the direction opposite the teeth … very cool!

I got this link from Petra, one of my Dutch friends …

Read More..

Do the Splits and See Where Your Money is Going

Sabtu, 01 Februari 2014

0 komentar
Managing your personal finances is much easier when you know exactly where your money is coming from and where its going. MoneyLine Personal Finance Software helps you track your cash flow quickly and easily.

split transaction to see where your money goes with MoneyLine personal finance software One of the easiest ways to see whats happening with your money is to use the split transaction feature in MoneyLine. For example, lets say you go to a store like Target or Walmart to buy groceries. Along with your groceries you stop off in the automotive section to pick up a couple of quarts of oil, then stop by the clothing section to pick up a few pairs of socks, and finally drop by the toy aisle to buy a birthday gift for a young relative.

Once youre home and have put away the groceries and the other items you bought, enter the purchase in MoneyLine. You can either record the total amount of the transaction and stop there, or take a few extra seconds and split the transaction into different categories. After entering the total amount spent at the store, break down exactly how much money you spent on food and allocate that to the Groceries category. Record the amount spent for the motor oil to Auto, put the socks under Clothing and finally the toy can go under Gifts.

You can even add subcategories to track things in still finer detail. For example, if you have two cars, you could make a subcategory for each vehicle underneath Auto expenses.

Over time, as you continue to categorize and split transactions you will have a better picture of exactly where you are spending your money. This helps when you are trying to create or stick to a budget—another feature of MoneyLine. You may find areas where you can cut back, or maybe you will find a few extra dollars that you can use for vacation and entertainment expenses—thats when keeping track of your money becomes fun.

Keeping track of your personal finances can be a chore, but with MoneyLine Personal Finance Software youll find that its actually a lot quicker than you may have feared.
Read More..

Simplex Noise for the Open Shading Language OSL

Senin, 20 Januari 2014

0 komentar
Simplex noise is a simple and fast alternative to Perlin noise that scales easily to arbitray dimensions. In this post I present a an implementation for 2, 3 and 4 dimensions

Simplex Noise

as of 22/4/2013 osl supports simplex noise natively, albeit for dimensions up to 4 only and without advection. This means that the code presented here and other articles on this blog stays relevant even when Blender incorporates this new OSL version but by then it probably would make sense to use the built-in simplex noise for 3 and 4 dimensions.

Simplex Noise is a simpler and faster alternative the the ubiquitous Perlin noise (Blender calls it simply noisein OSL). It was designed by Ken Perlin a decade ago and a nice article by Stefan Gustavson on the details and possible implementation is a good starter if you want to know more. In this post I present a port to OSL that is a more or less straight reimplementation of his java code.
The sampler above shows (from left to right) 2, 3 and 4D noise on a flat square and a sphere. The animated gif shows a short sequence of 4D noise (click to play from my site, Blogger doesnt show animated gifs).

The code is quite long, but well commented. I retained most of the comments from Stefans Java code as they explain rather well what is going on. To port the code pretty much all I needed to do was replace doubles by floats and to write a shader with some functions (OSL isnt object oriented so I had to seperate those out). The only difficulty was that the OSL compiler refuses to compile arrays of structs (I will investigate that further since it should be possible). Therefor, instead of defining an array of structs to represent a four dimensional gradients I split those arrays into an array of vectors and an array of floats. See the comments in the code where that is relevant. I realize that this code is quite long and especially the first part is hard to read due to the wide permutation tables so I advise to download it (click view plain) and read it in your favorite editor. (If you use Notepad++ or Ultraedit, setting syntax highlighting to javascript or C works quite well, Blenders internal editor has native highlighting support for OSL if you give the text buffer an .osl extension but I doesnt do a nice job on this example, at least not in my revision (r53600)).
/*
* A speed-improved simplex noise algorithm for 2D, 3D and 4D in OSL.
*
* Based on example Java code by Stefan Gustavson (stegu@itn.liu.se).
* Optimisations by Peter Eastman (peastman@drizzle.stanford.edu).
* Better rank ordering method by Stefan Gustavson in 2012.
*
* This could be speeded up even further, but its useful as it is.
*
* OSL port Michel Anders (varkenvarken) 2013-02-04
* original comment is is left in place, OSL specific comments
* are preceded by MJA
*
* This code was placed in the public domain by its original author,
* Stefan Gustavson. You may use it as you see fit, but
* attribution is appreciated.
*
*/

int fastfloor(float x) {
int xi = (int)x;
return x < xi ? xi-1 : xi;
}

// MJA it is safe to overload functions in OSL
// so heres some extra dot() versions
float dot(vector g, float x, float y) {
return g[0]*x + g[1]*y; }

float dot(vector g, float x, float y, float z) {
return g[0]*x + g[1]*y + g[2]*z; }

float dot(vector g, float t, float x, float y, float z, float w) {
return g[0]*x + g[1]*y + g[2]*z + t*w; }

shader simplexnoise(
point Pos = P,
float t = 0,
float Scale = 1,
int Dim = 2,
output float fac = 0
){
vector grad3[12] = {vector(1,1,0),vector(-1,1,0),
vector(1,-1,0),vector(-1,-1,0),
vector(1,0,1),vector(-1,0,1),
vector(1,0,-1),vector(-1,0,-1),
vector(0,1,1),vector(0,-1,1),
vector(0,1,-1),vector(0,-1,-1)};
// MJA I couldnt get OSL to compile an array of structs so
// I separated a vec4 into a vector and a float
vector grad4v[32]= {vector(0,1,1) ,vector(0,1,1) ,
vector(0,1,-1) ,vector(0,1,-1),
vector(0,-1,1),vector(0,-1,1) ,
vector(0,-1,-1),vector(0,-1,-1),
vector(1,0,1) ,vector(1,0,1) ,
vector(1,0,-1) ,vector(1,0,-1),
vector(-1,0,1),vector(-1,0,1) ,
vector(-1,0,-1),vector(-1,0,-1),
vector(1,1,0) ,vector(1,1,0) ,
vector(1,-1,0) ,vector(1,-1,0),
vector(-1,1,0),vector(-1,1,0) ,
vector(-1,-1,0),vector(-1,-1,0),
vector(1,1,1) ,vector(1,1,-1) ,
vector(1,-1,1) ,vector(1,-1,-1),
vector(-1,1,1),vector(-1,1,-1),
vector(-1,-1,1),vector(-1,-1,-1)};
float grad4t[32]= { 1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,
1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,
0,0,0,0,0,0,0,0};

int perm[512] = {151,160,137,91,90,15,
131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,
190, 6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,
88,237,149,56,87,174,20,125,136,171,168, 68,175,74,165,71,134,139,48,27,166,
77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,
102,143,54, 65,25,63,161, 1,216,80,73,209,76,132,187,208, 89,18,169,200,196,
135,130,116,188,159,86,164,100,109,198,173,186, 3,64,52,217,226,250,124,123,
5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,
223,183,170,213,119,248,152, 2,44,154,163, 70,221,153,101,155,167, 43,172,9,
129,22,39,253, 19,98,108,110,79,113,224,232,178,185, 112,104,218,246,97,228,
251,34,242,193,238,210,144,12,191,179,162,241, 81,51,145,235,249,14,239,107,
49,192,214, 31,181,199,106,157,184, 84,204,176,115,121,50,45,127, 4,150,254,
138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180,
151,160,137,91,90,15,
131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,
190, 6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,
88,237,149,56,87,174,20,125,136,171,168, 68,175,74,165,71,134,139,48,27,166,
77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,
102,143,54, 65,25,63,161, 1,216,80,73,209,76,132,187,208, 89,18,169,200,196,
135,130,116,188,159,86,164,100,109,198,173,186, 3,64,52,217,226,250,124,123,
5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,
223,183,170,213,119,248,152, 2,44,154,163, 70,221,153,101,155,167, 43,172,9,
129,22,39,253, 19,98,108,110,79,113,224,232,178,185, 112,104,218,246,97,228,
251,34,242,193,238,210,144,12,191,179,162,241, 81,51,145,235,249,14,239,107,
49,192,214, 31,181,199,106,157,184, 84,204,176,115,121,50,45,127, 4,150,254,
138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180};
// MJA precomputing this table instead of calculating it as done in the
// original code saves 30% running time.
int permMod12[512] = { 7, 4, 5, 7, 6, 3, 11, 1, 9, 11, 0, 5, 2, 5, 7, 9, 8,
0, 7, 6, 9, 10, 8, 3, 1, 0, 9, 10, 11, 10, 6, 4, 7, 0, 6, 3, 0, 2, 5, 2, 10,
0, 3, 11, 9, 11, 11, 8, 9, 9, 9, 4, 9, 5, 8, 3, 6, 8, 5, 4, 3, 0, 8, 7, 2, 9,
11, 2, 7, 0, 3, 10, 5, 2, 2, 3, 11, 3, 1, 2, 0, 7, 1, 2, 4, 9, 8, 5, 7, 10,
5, 4, 4, 6, 11, 6, 5, 1, 3, 5, 1, 0, 8, 1, 5, 4, 0, 7, 4, 5, 6, 1, 8, 4, 3,
10, 8, 8, 3, 2, 8, 4, 1, 6, 5, 6, 3, 4, 4, 1, 10, 10, 4, 3, 5, 10, 2, 3, 10,
6, 3, 10, 1, 8, 3, 2, 11, 11, 11, 4, 10, 5, 2, 9, 4, 6, 7, 3, 2, 9, 11, 8, 8,
2, 8, 10, 7, 10, 5, 9, 5, 11, 11, 7, 4, 9, 9, 10, 3, 1, 7, 2, 0, 2, 7, 5, 8,
4, 10, 5, 4, 8, 2, 6, 1, 0, 11, 10, 2, 1, 10, 6, 0, 0, 11, 11, 6, 1, 9, 3, 1,
7, 9, 2, 11, 11, 1, 0, 10, 7, 1, 7, 10, 1, 4, 0, 0, 8, 7, 1, 2, 9, 7, 4, 6, 2,
6, 8, 1, 9, 6, 6, 7, 5, 0, 0, 3, 9, 8, 3, 6, 6, 11, 1, 0, 0, 7, 4, 5, 7, 6, 3,
11, 1, 9, 11, 0, 5, 2, 5, 7, 9, 8, 0, 7, 6, 9, 10, 8, 3, 1, 0, 9, 10, 11, 10,
6, 4, 7, 0, 6, 3, 0, 2, 5, 2, 10, 0, 3, 11, 9, 11, 11, 8, 9, 9, 9, 4, 9, 5, 8,
3, 6, 8, 5, 4, 3, 0, 8, 7, 2, 9, 11, 2, 7, 0, 3, 10, 5, 2, 2, 3, 11, 3, 1, 2,
0, 7, 1, 2, 4, 9, 8, 5, 7, 10, 5, 4, 4, 6, 11, 6, 5, 1, 3, 5, 1, 0, 8, 1, 5, 4,
0, 7, 4, 5, 6, 1, 8, 4, 3, 10, 8, 8, 3, 2, 8, 4, 1, 6, 5, 6, 3, 4, 4, 1, 10, 10,
4, 3, 5, 10, 2, 3, 10, 6, 3, 10, 1, 8, 3, 2, 11, 11, 11, 4, 10, 5, 2, 9, 4, 6, 7,
3, 2, 9, 11, 8, 8, 2, 8, 10, 7, 10, 5, 9, 5, 11, 11, 7, 4, 9, 9, 10, 3, 1, 7, 2,
0, 2, 7, 5, 8, 4, 10, 5, 4, 8, 2, 6, 1, 0, 11, 10, 2, 1, 10, 6, 0, 0, 11, 11, 6,
1, 9, 3, 1, 7, 9, 2, 11, 11, 1, 0, 10, 7, 1, 7, 10, 1, 4, 0, 0, 8, 7, 1, 2, 9, 7,
4, 6, 2, 6, 8, 1, 9, 6, 6, 7, 5, 0, 0, 3, 9, 8, 3, 6, 6, 11, 1, 0, 0};

// Skewing and unskewing factors for 2, 3, and 4 dimensions
float F2 = 0.5*(sqrt(3.0)-1.0);
float G2 = (3.0-sqrt(3.0))/6.0;
float F3 = 1.0/3.0;
float G3 = 1.0/6.0;
float F4 = (sqrt(5.0)-1.0)/4.0;
float G4 = (5.0-sqrt(5.0))/20.0;

if(Dim == 2){
// 2D simplex noise
float xin=Pos[0]*Scale, yin=Pos[1]*Scale;
float n0, n1, n2; // Noise contributions from the three corners
// Skew the input space to determine which simplex cell were in
float s = (xin+yin)*F2; // Hairy factor for 2D
int i = fastfloor(xin+s);
int j = fastfloor(yin+s);
float t = (i+j)*G2;
float X0 = i-t; // Unskew the cell origin back to (x,y) space
float Y0 = j-t;
float x0 = xin-X0; // The x,y distances from the cell origin
float y0 = yin-Y0;
// For the 2D case, the simplex shape is an equilateral triangle.
// Determine which simplex we are in.
int i1, j1; // Offsets for second (middle) corner of simplex in (i,j) coords
if(x0>y0) {i1=1; j1=0;} // lower triangle, XY order: (0,0)->(1,0)->(1,1)
else {i1=0; j1=1;} // upper triangle, YX order: (0,0)->(0,1)->(1,1)
// A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and
// a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where
// c = (3-sqrt(3))/6
float x1 = x0 - i1 + G2; // Offsets for middle corner in (x,y) unskewed coords
float y1 = y0 - j1 + G2;
float x2 = x0 - 1.0 + 2.0 * G2; // Offsets for last corner in (x,y) unskewed coords
float y2 = y0 - 1.0 + 2.0 * G2;
// Work out the hashed gradient indices of the three simplex corners
int ii = i & 255;
int jj = j & 255;
int gi0 = permMod12[ii+perm[jj]];
int gi1 = permMod12[ii+i1+perm[jj+j1]];
int gi2 = permMod12[ii+1+perm[jj+1]];
// Calculate the contribution from the three corners
float t0 = 0.5 - x0*x0-y0*y0;
if(t0 < 0) n0 = 0.0;
else {
t0 *= t0;
n0 = t0 * t0 * dot(grad3[gi0], x0, y0); // (x,y) of grad3 used for 2D gradient
}
float t1 = 0.5 - x1*x1-y1*y1;
if(t1 < 0) n1 = 0.0;
else {
t1 *= t1;
n1 = t1 * t1 * dot(grad3[gi1], x1, y1);
}
float t2 = 0.5 - x2*x2-y2*y2;
if(t2 < 0) n2 = 0.0;
else {
t2 *= t2;
n2 = t2 * t2 * dot(grad3[gi2], x2, y2);
}
// Add contributions from each corner to get the final noise value.
// The result is scaled to return values in the interval [-1,1].
fac = 70.0 * (n0 + n1 + n2);
} else if(Dim == 3){
// 3D simplex noise
float xin=Pos[0]*Scale, yin=Pos[1]*Scale, zin=Pos[2]*Scale;
float n0, n1, n2, n3; // Noise contributions from the four corners
// Skew the input space to determine which simplex cell were in
float s = (xin+yin+zin)*F3; // Very nice and simple skew factor for 3D
int i = fastfloor(xin+s);
int j = fastfloor(yin+s);
int k = fastfloor(zin+s);
float t = (i+j+k)*G3;
float X0 = i-t; // Unskew the cell origin back to (x,y,z) space
float Y0 = j-t;
float Z0 = k-t;
float x0 = xin-X0; // The x,y,z distances from the cell origin
float y0 = yin-Y0;
float z0 = zin-Z0;
// For the 3D case, the simplex shape is a slightly irregular tetrahedron.
// Determine which simplex we are in.
int i1, j1, k1; // Offsets for second corner of simplex in (i,j,k) coords
int i2, j2, k2; // Offsets for third corner of simplex in (i,j,k) coords
if(x0>=y0) {
if(y0>=z0)
{ i1=1; j1=0; k1=0; i2=1; j2=1; k2=0; } // X Y Z order
else if(x0>=z0) { i1=1; j1=0; k1=0; i2=1; j2=0; k2=1; } // X Z Y order
else { i1=0; j1=0; k1=1; i2=1; j2=0; k2=1; } // Z X Y order
}
else { // x0 < y0
if(y0 < z0) { i1=0; j1=0; k1=1; i2=0; j2=1; k2=1; } // Z Y X order
else if(x0 < z0) { i1=0; j1=1; k1=0; i2=0; j2=1; k2=1; } // Y Z X order
else { i1=0; j1=1; k1=0; i2=1; j2=1; k2=0; } // Y X Z order
}
// A step of (1,0,0) in (i,j,k) means a step of (1-c,-c,-c) in (x,y,z),
// a step of (0,1,0) in (i,j,k) means a step of (-c,1-c,-c) in (x,y,z), and
// a step of (0,0,1) in (i,j,k) means a step of (-c,-c,1-c) in (x,y,z), where
// c = 1/6.
float x1 = x0 - i1 + G3; // Offsets for second corner in (x,y,z) coords
float y1 = y0 - j1 + G3;
float z1 = z0 - k1 + G3;
float x2 = x0 - i2 + 2.0*G3; // Offsets for third corner in (x,y,z) coords
float y2 = y0 - j2 + 2.0*G3;
float z2 = z0 - k2 + 2.0*G3;
float x3 = x0 - 1.0 + 3.0*G3; // Offsets for last corner in (x,y,z) coords
float y3 = y0 - 1.0 + 3.0*G3;
float z3 = z0 - 1.0 + 3.0*G3;
// Work out the hashed gradient indices of the four simplex corners
int ii = i & 255;
int jj = j & 255;
int kk = k & 255;
int gi0 = permMod12[ii+perm[jj+perm[kk]]];
int gi1 = permMod12[ii+i1+perm[jj+j1+perm[kk+k1]]];
int gi2 = permMod12[ii+i2+perm[jj+j2+perm[kk+k2]]];
int gi3 = permMod12[ii+1+perm[jj+1+perm[kk+1]]];
// Calculate the contribution from the four corners
float t0 = 0.6 - x0*x0 - y0*y0 - z0*z0;
if(t0 < 0) n0 = 0.0;
else {
t0 *= t0;
n0 = t0 * t0 * dot(grad3[gi0], x0, y0, z0);
}
float t1 = 0.6 - x1*x1 - y1*y1 - z1*z1;
if(t1 < 0) n1 = 0.0;
else {
t1 *= t1;
n1 = t1 * t1 * dot(grad3[gi1], x1, y1, z1);
}
float t2 = 0.6 - x2*x2 - y2*y2 - z2*z2;
if(t2 < 0) n2 = 0.0;
else {
t2 *= t2;
n2 = t2 * t2 * dot(grad3[gi2], x2, y2, z2);
}
float t3 = 0.6 - x3*x3 - y3*y3 - z3*z3;
if(t3 < 0) n3 = 0.0;
else {
t3 *= t3;
n3 = t3 * t3 * dot(grad3[gi3], x3, y3, z3);
}
// Add contributions from each corner to get the final noise value.
// The result is scaled to stay just inside [-1,1]
fac = 32.0*(n0 + n1 + n2 + n3);
} else if ( Dim == 4 ) {
// 4D simplex noise, better simplex rank ordering method 2012-03-09
float x=Pos[0]*Scale, y=Pos[1]*Scale, z=Pos[3]*Scale, w=t*Scale;

float n0, n1, n2, n3, n4; // Noise contributions from the five corners
// Skew the (x,y,z,w) space to determine which cell of 24 simplices were in
float s = (x + y + z + w) * F4; // Factor for 4D skewing
int i = fastfloor(x + s);
int j = fastfloor(y + s);
int k = fastfloor(z + s);
int l = fastfloor(w + s);
float t = (i + j + k + l) * G4; // Factor for 4D unskewing
float X0 = i - t; // Unskew the cell origin back to (x,y,z,w) space
float Y0 = j - t;
float Z0 = k - t;
float W0 = l - t;
float x0 = x - X0; // The x,y,z,w distances from the cell origin
float y0 = y - Y0;
float z0 = z - Z0;
float w0 = w - W0;
// For the 4D case, the simplex is a 4D shape I wont even try to describe.
// To find out which of the 24 possible simplices were in, we need to
// determine the magnitude ordering of x0, y0, z0 and w0.
// Six pair-wise comparisons are performed between each possible pair
// of the four coordinates, and the results are used to rank the numbers.
int rankx = 0;
int ranky = 0;
int rankz = 0;
int rankw = 0;
if(x0 > y0) rankx++; else ranky++;
if(x0 > z0) rankx++; else rankz++;
if(x0 > w0) rankx++; else rankw++;
if(y0 > z0) ranky++; else rankz++;
if(y0 > w0) ranky++; else rankw++;
if(z0 > w0) rankz++; else rankw++;
int i1, j1, k1, l1; // The integer offsets for the second simplex corner
int i2, j2, k2, l2; // The integer offsets for the third simplex corner
int i3, j3, k3, l3; // The integer offsets for the fourth simplex corner
// simplex[c] is a 4-vector with the numbers 0, 1, 2 and 3 in some order.
// Many values of c will never occur, since e.g. x>y>z>w makes x < z, y < w and x < w
// impossible. Only the 24 indices which have non-zero entries make any sense.
// We use a thresholding to set the coordinates in turn from the largest magnitude.
// Rank 3 denotes the largest coordinate.
i1 = rankx >= 3 ? 1 : 0;
j1 = ranky >= 3 ? 1 : 0;
k1 = rankz >= 3 ? 1 : 0;
l1 = rankw >= 3 ? 1 : 0;
// Rank 2 denotes the second largest coordinate.
i2 = rankx >= 2 ? 1 : 0;
j2 = ranky >= 2 ? 1 : 0;
k2 = rankz >= 2 ? 1 : 0;
l2 = rankw >= 2 ? 1 : 0;
// Rank 1 denotes the second smallest coordinate.
i3 = rankx >= 1 ? 1 : 0;
j3 = ranky >= 1 ? 1 : 0;
k3 = rankz >= 1 ? 1 : 0;
l3 = rankw >= 1 ? 1 : 0;
// The fifth corner has all coordinate offsets = 1, so no need to compute that.
float x1 = x0 - i1 + G4; // Offsets for second corner in (x,y,z,w) coords
float y1 = y0 - j1 + G4;
float z1 = z0 - k1 + G4;
float w1 = w0 - l1 + G4;
float x2 = x0 - i2 + 2.0*G4; // Offsets for third corner in (x,y,z,w) coords
float y2 = y0 - j2 + 2.0*G4;
float z2 = z0 - k2 + 2.0*G4;
float w2 = w0 - l2 + 2.0*G4;
float x3 = x0 - i3 + 3.0*G4; // Offsets for fourth corner in (x,y,z,w) coords
float y3 = y0 - j3 + 3.0*G4;
float z3 = z0 - k3 + 3.0*G4;
float w3 = w0 - l3 + 3.0*G4;
float x4 = x0 - 1.0 + 4.0*G4; // Offsets for last corner in (x,y,z,w) coords
float y4 = y0 - 1.0 + 4.0*G4;
float z4 = z0 - 1.0 + 4.0*G4;
float w4 = w0 - 1.0 + 4.0*G4;
// Work out the hashed gradient indices of the five simplex corners
int ii = i & 255;
int jj = j & 255;
int kk = k & 255;
int ll = l & 255;
int gi0 = perm[ii+perm[jj+perm[kk+perm[ll]]]] % 32;
int gi1 = perm[ii+i1+perm[jj+j1+perm[kk+k1+perm[ll+l1]]]] % 32;
int gi2 = perm[ii+i2+perm[jj+j2+perm[kk+k2+perm[ll+l2]]]] % 32;
int gi3 = perm[ii+i3+perm[jj+j3+perm[kk+k3+perm[ll+l3]]]] % 32;
int gi4 = perm[ii+1+perm[jj+1+perm[kk+1+perm[ll+1]]]] % 32;
// Calculate the contribution from the five corners
// MJA because I couldnt get OSL to compile an array of structs
// the 4-vectors for the gradients are split into an array with
// regular vectors (x,y,z) in grad4v and an array of floats
// (for the w component) in grad4t
float t0 = 0.6 - x0*x0 - y0*y0 - z0*z0 - w0*w0;
if(t0 < 0) n0 = 0.0;
else {
t0 *= t0;
n0 = t0 * t0 * dot(grad4v[gi0], grad4t[gi0], x0, y0, z0, w0);
}
float t1 = 0.6 - x1*x1 - y1*y1 - z1*z1 - w1*w1;
if(t1 < 0) n1 = 0.0;
else {
t1 *= t1;
n1 = t1 * t1 * dot(grad4v[gi1], grad4t[gi1], x1, y1, z1, w1);
}
float t2 = 0.6 - x2*x2 - y2*y2 - z2*z2 - w2*w2;
if(t2 < 0) n2 = 0.0;
else {
t2 *= t2;
n2 = t2 * t2 * dot(grad4v[gi2], grad4t[gi2], x2, y2, z2, w2);
}
float t3 = 0.6 - x3*x3 - y3*y3 - z3*z3 - w3*w3;
if(t3 < 0) n3 = 0.0;
else {
t3 *= t3;
n3 = t3 * t3 * dot(grad4v[gi3], grad4t[gi3], x3, y3, z3, w3);
}
float t4 = 0.6 - x4*x4 - y4*y4 - z4*z4 - w4*w4;
if(t4 < 0) n4 = 0.0;
else {
t4 *= t4;
n4 = t4 * t4 * dot(grad4v[gi4], grad4t[gi4], x4, y4, z4, w4);
}
// Sum up and scale the result to cover the range [-1,1]
fac = 27.0 * (n0 + n1 + n2 + n3 + n4);
}
}
Read More..

Copyright © 2010 All About Tech Information | Powered By Blogger