Colocando a sombra da nuvem no seu mapa
Post por Matheus Willian
Tutorial por jmprsh153
Você está aqui: Home » Artigos do Marcador light

The few niggles with the old system finally got to, and wore me down. After spending a bit of time on a few improvements, I now have lights with a persistent state, so you can leave your light on and switch weapons without artifacts being left behind – and it’s really dead simple.
Two lines in the code are identical:
bLightEnabled = false;
These two lines need to be deleted, and the following block added:
simulated state WeaponPuttingDown
{
simulated function BeginState( Name PreviousStateName )
{
local UTPlayerController PC;
PC = UTPlayerController(Instigator.Controller);
if (PC != None && LocalPlayer(PC.Player) != none )
{
PC.EndZoom();
}
Flashlight.Destroy();
TimeWeaponPutDown();
bWeaponPutDown = false;
}
simulated function EndState(Name NextStateName)
{
Super.EndState(NextStateName);
if (SkeletalMeshComponent(Mesh) == none || WeaponEquipAnim == '')
{
Mesh.SetRotation(Default.Mesh.Rotation);
}
}
simulated function Activate();
/**
* @returns false if the weapon isn't ready to be fired. For example, if it's in the Inactive/WeaponPuttingDown states.
*/
simulated function bool bReadyToFire()
{
return false;
}
}
During the development, there was a slight issue where the light wouldn’t turn on until you had switched away, and then back to your weapon – This was a simple matter of the Flashlight object not being spawned, and the addFlashlight function has been modified accordingly:
simulated function addFlashlight()
{
if(bLight)
{
PlayWeaponAnimation('reload', 1.0);
WorldInfo.Game.Broadcast(self, "Light removed");
Flashlight.Destroy();
bLight = false;
}
else
{
PlayWeaponAnimation('reload', 1.0);
WorldInfo.Game.Broadcast(self, "Light added");
Flashlight = Spawn(class'ZO_WATT_Light', self);
Flashlight.SetBase(self);
Flashlight.LightComponent.SetEnabled(bLightEnabled);
bLight = true;
}
}
I managed to surprise myself at how simple this was after walking away from it for a little bit and coming back with a set of fresh eyes.
Last night I made a rudimentary flashlight that was either on or off, pretty simple really. Tonight, this has expanded into the ability to attach or remove a flashlight from a gun, and then turn it on or off if it is attached. This also works between guns, so one of your guns might have the light attached, and the other might not. As is my normal, i have created another video that shows this in action.
There are a couple of minor changes in the script from last night, mainly in the Weapon class, as shown here:
simulated function toggleFlashlight()
{
if(bLight)
{
bLightEnabled = !bLightEnabled;
WorldInfo.Game.Broadcast(self, "Weapon sent trigger");
FlashLightToggled();
// if we are a remote client, make sure the Server Set's toggles the flashlight
if( Role < Role_Authority )
{
ServerToggleFlashlight();
}
}
}
simulated function addFlashlight()
{
if(bLight)
{
PlayWeaponAnimation('reload', 1.0);
WorldInfo.Game.Broadcast(self, "Light removed");
bLight = false;
}
else
{
PlayWeaponAnimation('reload', 1.0);
WorldInfo.Game.Broadcast(self, "Light added");
bLight = true;
}
}
So, as you can see, not a lot different, but it makes a sizeable difference to the way that the game is played. The only things that really remain to be seen from a functional point of view are the implementation of some animations – which knowing me will be very rough ones; and turning the light off when the weapon is put away, otherwise an artifact of the old light is left in place, and a player could quite easily light up a room in this way.
GI é a abreviação de Global Ilumination, ou seja, Iluminação Global. Levando em conta que iluminação é um fator decisivo para uma boa renderização, este é um assunto que deve ser muito bem estudado. Vamos então sair um pouco do mundo digital para vermos o que acontece mundo real.
*É muito importante que você neste momento procure ser bastante observador. Note cada detalhe da imagem, como a luz se propaga, como ela é refletida entre os objetos, como as sombras são criadas, etc.
Veja estas duas imagens num dia ensolarado:
Note como existe sombras fortes e fracas, que iremos chamar de hard shadows e soft shadows, respectivamente. As hard shadows são mais fieis a forma dos objetos de origem, e as soft shadows são mais suaves e borradas.
Note também como as cores são passadas de um objeto ao outro. Os objetos refletem parcialmente a iluminação que recebem e esta iluminação é visível na face dos objetos que o rodeiam. Isto se chama color bleed, fator fundamental do GI.
Agora veja esta imagem em um dia nublado:
Podemos ver as mesmas propriedades, porém umas em maior intensidade como no caso as soft shadows. Isto está sendo causado pela difusão da luz e principalmente por ter uma iluminação geral localizada no céu, que geralmente é chamada de sky light. A característica da sky light é produzir uma iluminação vinda de todas as direções, e é justamente o que acontece num dia nublado. Veja a comparação abaixo:
* À esquerda, um dia ensolarado. Isto significa um ponto principal de iluminação e será este ponto o responsável por criar as sombras definidas (hard shadows). Note que o ponto especular (a parte mais clara da bola), também será bastante definida dependendo do material que forma o objeto.
*Já na direita, não existe um ponto principal de iluminação. Toda a área do céu está iluminando os objetos. É isto que cria uma sombra desfocada. Como há luz vindo pela direita do objeto, uma sombra é projetada a esquerda, mas também há luz vindo pela frente (projetando uma sombra atrás), luz vindo pela esquerda (projetando sombra a direita), e assim em diante criando um degradê suave de sombras. Da mesma forma, o ponto especular do objeto não é definido. Lembre-se que você pode configurar a sky light tanto para projetar iluminação com baixa ou alta intensidade.
Outro fator muito importante é a propriedade de reflexão da luz. Isto implica na troca de cores entre os objetos (color bleed). Imagine uma bola de plástico azul ao lado de uma parede branca. Tente imaginar o que aconteceria com a cor da parede branca que está próxima a bola. Exatamente, ficaria com um tom azulado.
A parede fica com esta coloração pois uma porção dos raios de luz "colidiram" com a bola, foram então refletidos, "colidiram" com a parede e chegaram até os nossos olhos.
É assim que a luz se propaga pelo ambiente e é isto que iremos simular num ambiente 3D. Veja abaixo duas renderizações: à esquerda, com os cálculos de GI desativados e à direita, com os cálculos ativados. Peço novamente que observe todos os detalhes (iluminação, cor, sombras, etc.)
Isto tudo poderemos simular com cálculos relacionados ao GI. Então pessoal, sem entender como as coisas são e funcionam no mundo real, não saberemos como aplicar isto ao mundo digital. É a mesma coisa que eu querer desenhar uma flor mas não saber o que é e qual formato tem.
É a partir de hoje que você deverá se tornar uma pessoa mais observadora. Ao sair na rua, comece a ver todos os detalhes que o formam o mundo, não olhe normalmente para as coisas, ao ver algo, pense como poderia ser representados no 3ds max. Como a iluminação interage? No seu quarto, quantos pontos de luz há? Quantas sombras são formadas e qual o tipo? Como a luz que entra pela janela se propaga pelo quarto formando sombras? etc...
Um grande abraço pessoal e peço que fiquem preparados para a próxima matéria, onde iremos colocar a mão na massa!"
Fonte: www.imasters.uol.com.br