Endeavor Modifications

Please Help Support E-Mods.net by Donating


News:

Looking for Video Tutorials? Check out the Open Nod Development section of e-mods.net.

E-Mods.net also has CryEngine tutorials! Check out the Open CryEngine Development section too.

Author Topic: WIP modelling  (Read 1981 times)

Offline ORI

  • Team
  • Member
  • ******
  • Posts: 365
  • Karma: 1
WIP modelling
« on: 2007-06-09, 17:03:35 »
Some Work in progress on a model im making for Redemption, Iv made a new base model which im going transform into a Black Metamorphosis(Obteneberation 4 which is a sort of  shadowy human demonic form with four tentecal) model after I finish tweaking this base model. Iv decieded to do this since Im playing on NYCRPG and the game doesnt have a model for Black Metamorphosis, nor decent Tzimisce models aside from the generic warform .  also doing it for the practice.
So far most of it is done but I think of adding detail on the legs to make them more round and proportionized, and obviously attaching the Head to the Torso but that is not so difficult.

Iv decieded to build a humaniod model from scratch as a sort of learning process as opposed to just taking a Christoph, The model is still in Quads and willl undergo Triangulation once its exported into Milkshape, that way I can keep polycount on a decent level.

Anyway Critic and suggestions on Anatomy are welcome. If it goes well Ill use it to creat also a Tzimisce Model(using a differenthead mesh I already made some time ago and also other variants.

[img src="http://img181.imageshack.us/my.php?image=huminiod1ga1.jpg"]http://1[/img]

[img src="http://img181.imageshack.us/my.php?image=h4wg2.jpg"]http://2[/img]

[img src="http://img181.imageshack.us/my.php?image=h3vt2.jpg"]http://[/img]

[img src="http://img181.imageshack.us/my.php?image=huminiod2ju7.jpg"][/img]

After I finish modeling all I got to do is setup UVs , make some Textures(which is not so hard cause its mostly black anyways )  and do the Milkshape rigging thing which might be a pain, I dont know yet.

The Four arms of Black Metamorphosis are either going to move with the Torso or Binded to some other bones(cloak bones?) to give them some animated movement, I didnt expiriment with it much in VTMR so will have to test it. If it works well I plan on making variants
« Last Edit: 2007-06-09, 17:06:13 by ORI »

Offline Xaltar

  • Team
  • Member
  • ******
  • Posts: 67
  • Karma: 0
    • Vampires Gaze
Re: WIP modelling
« Reply #1 on: 2007-06-10, 02:32:22 »
Looking good Ori, some nice low poly work ;)

For the tenticles you can attach them all to the arm bones, if you do it right it could look cool, they would all move at the same time and the same way as the arms though but it would look cooler than having them just flapping like hair or a cloak...

Offline ORI

  • Team
  • Member
  • ******
  • Posts: 365
  • Karma: 1
Re: WIP modelling
« Reply #2 on: 2007-06-30, 00:08:49 »
Thanks Xaltar. Mordred made some advancement towards Skeleton import/export so maybe there is hope I will be able to rig him proper eventually  :)

I finished the base model and move to modelling the tentecals on it:

http://img340.imageshack.us/my.php?image=bm1qh6.jpg

Hi res:

http://img340.imageshack.us/my.php?image=bmhireskm9.jpg


I still dont like how the abdomen tentecals sit on thier base so I might do abit of tweaking there so it looks more like the upper torso ones, the model still has a seam because I cut it in half to make the addition symmetrical.

I now need to quick rig one tentecal to see how it twist and deform in animation and maybe make some more cuts if it doesnt deform well.


In the current state Polygon count on low res After Triangulation is 2510 so I may have to remove some minor detail from the mesh.
« Last Edit: 2007-06-30, 00:40:47 by ORI »

Offline ORI

  • Team
  • Member
  • ******
  • Posts: 365
  • Karma: 1
Re: WIP modelling
« Reply #3 on: 2007-07-05, 10:36:31 »
[img]http://img510.imageshack.us/my.php?image=blenderxt8.jpg[img]

After being incrediably disappointed with the buggy animation bones in Gmax Iv decieded to import the whole model to blender and work with blender from now.


Offline Javokis

  • Horses Dick
  • Member
  • *****
  • Posts: 1948
  • Karma: 2
Re: WIP modelling
« Reply #4 on: 2007-07-18, 01:50:29 »
So this is going to be a discipline shapeshift-type model? Where the player used Obtenebration and changes into this?

I forgot to add a shapeshift command to Wodal... I'll need to add one. There's also another command I'll have to add for changing the base model too. If you want players to be able to manipulate items in their inventory (carry a gun, swing a sword, use potions, ect) while in Obtenebration form then you'll need to use the command that changes the player's base model rather than a shapeshift command. If you use the base model change you'll need to make FOUR versions of your Obtenebration form for the four types of skeletons available in the game.

It is highly recommended to stick with using the 4 skeleton types initially available in the game engine - actally there are 5 skeleton id types if you include the floating Tremere enemies. If you make a new skeleton, you'll have to redo EVERY WEAPON IN THE GAME to include your new skeleton or else weapons will not appear when equipped and flashlights, torches, along with other special items may not look right or appear right (if at all) on your new model.
"There's nothing wrong with horses dicks, there's nothing wrong with sucking horses dicks." -Signo

Offline ORI

  • Team
  • Member
  • ******
  • Posts: 365
  • Karma: 1
Re: WIP modelling
« Reply #5 on: 2007-07-18, 06:46:13 »
Yeah Im not too concerned about that, only means Ill have to rig it to multiple skeletons , I first thought about simple shapeshifting but changing player base model sounds even better.
If you can make shapeshifting availble it will make also Driving (change player to use car model for example),Animal Shapeshifts, Werewolves and other interesting disciplines possiable so I think it would be a good idea. 

I wont be making a new skeleton for redemption because that is not possiable yet as far as I know? Rigging the model to different skeletons is poassiable however and maybe slightly more rigwork but shouldnt be much of a problem and I anyway wanted to do variants to fit several character types (so players can choose a style they like) , For now though Ill see about getting one working and after that move to making Female variant of it, etc.

Its rather complex for a first time thing but I learn thorugh it , im currently tweaking to make it look more demonic but it shouldnt be long until I am ready to put it to the test in game.  Ill also need to add alot of dark shadow/smoke particle (similar to the particles on the Dark Hunter model in Redemption)

Another Idea I had was how to make Arms of the Abyss (because smoke particles like in WoDmod looked kinda lame) so I think of making a tentecle mesh that extrudes out of a pool like base and rig it to one of the Humaniod models so that when it use the Feed Animation it looks like it wraps itself around the target and immobolize it. that one should be much easier to make because its a NPC and I wont be rigging all the bones.( it will require some more coding before fully implamented I think because it involve possessing the "NPC" Tentecal?)


As for Shroud of the Night(Scaleable Shadowdome like in WoDmod? and AoE effect that Damage mortal and Agitate kindred) and Teneberous Form (Simple Shapeshift+ very small scale AoE special effect similar to the effect of Shroud of the night +invulunrability to physical damage)  and it should cover Obteneberation Discipline.
« Last Edit: 2007-07-18, 11:16:20 by ORI »

Offline Javokis

  • Horses Dick
  • Member
  • *****
  • Posts: 1948
  • Karma: 2
Re: WIP modelling
« Reply #6 on: 2007-07-18, 13:40:55 »
Yeah Im not too concerned about that, only means Ill have to rig it to multiple skeletons , I first thought about simple shapeshifting but changing player base model sounds even better.
If you can make shapeshifting availble it will make also Driving (change player to use car model for example),Animal Shapeshifts, Werewolves and other interesting disciplines possiable so I think it would be a good idea. 

Some things to know about shapeshifting:

-You can only shapeshift into a player or npc object type. (attempting to shapeshift into anything else results in game crash) So if you're going to shapeshift into a car, be sure there is a custom car template made that is of a npc or player type object.
-When you change the base model, be sure you inputted the original model name into the player's character file as a model tag so you can use it as a reference to restore their model when the effect ends. I currently don't have a NOT file reader that can seek the original model value and there is no GetModel() command in the SDK java playground. So Wodal allows you to input a custom tag into your character file containing the name of the .nod base model that can be referenced by a tag value search using a [charcheck] command in your Wodal script. (I'll have to write a tutorial for this in the Wodal section when the 0.1a launches.)

As for Shroud of the Night(Scaleable Shadowdome like in WoDmod? and AoE effect that Damage mortal and Agitate kindred) and Teneberous Form (Simple Shapeshift+ very small scale AoE special effect similar to the effect of Shroud of the night +invulunrability to physical damage)  and it should cover Obteneberation Discipline.

Ugh. I didn't like that discipline in Wod. The last time I saw it was the last time I wanted to see it. The dang thing blackens the whole screen + GUI. If you're unfamiliar with what happened, you'll think the game just broke. Bad idea. There's got to be a better way to do that.
"There's nothing wrong with horses dicks, there's nothing wrong with sucking horses dicks." -Signo

Offline ORI

  • Team
  • Member
  • ******
  • Posts: 365
  • Karma: 1
Re: WIP modelling
« Reply #7 on: 2007-07-18, 14:54:52 »
Ugh. I didn't like that discipline in Wod. The last time I saw it was the last time I wanted to see it. The dang thing blackens the whole screen + GUI. If you're unfamiliar with what happened, you'll think the game just broke. Bad idea. There's got to be a better way to do that.

Last time I looked Shroud of the Night simply created a black domeshaped object the surrounded the player, your character can see inside it and around, if the enemy cant see anything its because thats how the discipline affect others, it didnt affect my character in that way, dont think it makes the GUI disappear though.. I used WoDmod 1.2 so I never really encountered what you say in that mod but could be thats because my own character activated the discipline.

I guess the real question is if you can make the darkness gradually blacken the enemie's surroundings without affecting the GUI or Chatbox? Yeah I guess you can if you creat a very black object that constantly blocks the enemie's camara while he is inside the AoE zone.(but doesnt block the caster's camara)
The other way I was thinking of is effect on the enemy so everything (Characters, NPC, Objects?) become invisiable to him while inside the dome and his screen turns to a Dark Blue/ Grey Tint and text appearing in bright telling him of the effect taking place (which still allows the enemy to see the client is not dead and its a discipline effect) The Character would be able immobolized with all the effects on its stats and will be able to move only after commiting a relevant roll per turn( Per+Athletics? Diff +2) to emulate the confusion aspect and difficulty of moving blinded and a Simple Diff+2 to all other actions as described by the corebook.

Also its important to know that effect to some extent could be negated by use of Lure of Flames or holding Tourch (in short the shroud doesnt extinguish fire based lightsources)
« Last Edit: 2007-07-18, 15:01:54 by ORI »

Offline Paine

  • Member
  • *
  • Posts: 20
  • Karma: 0
Re: WIP modelling
« Reply #8 on: 2007-07-18, 22:06:57 »
Quote
I currently don't have a NOT file reader that can seek the original model value and there is no GetModel() command in the SDK java playground.

Code: [Select]
import java.io.*;

public class Blah
{
File file;

FileInputStream fs;

DataInputStream ds;

NOTTemplateRef refs[];

int currentPos = 0;

String signature = "NOT"+(char)0x10;

public Blah(String filename)
{
File file = new File(filename);
if(file.exists() && file.canRead() && !file.isDirectory())
{
try
{
fs = new FileInputStream(file);
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
else
{
System.out.println("File can't be read.");
}
}

boolean read()
{

try
{
ds = new DataInputStream(fs);

String signature = readStr(4);

if(!signature.equalsIgnoreCase(signature))
{
System.out.println("Invalid signature.");
return false;
}


int version = readIntLE();

if(version != 1)
{
System.out.println("Invalid version.");
return false;
}

int numTemplates = readIntLE();


refs = new NOTTemplateRef[numTemplates];

for(int i = 0; i < numTemplates; i++)
{
String name = readStr(32);
int offset = readIntLE();
refs[i] = new NOTTemplateRef(name,offset);
}

for(int i = 0; i < numTemplates; i++)
{
skip(refs[i].offset-currentPos);

int numTags = readIntLE();

for(int j = 0; j < numTags; j++)
{
int tagID = readIntLE();
if(tagID == 4) //MODEL TAG
{
String value=readStr(32);
System.out.println(refs[i].name+" - MODEL: "+value);
}
else
{
skip(32);
}
}

//Store the template somewhere..
}

ds.close();
}
catch(Exception e)
{
System.out.println("Exception [blah.read()] <"+e.getMessage()+">");
e.printStackTrace();
return false;
}


return true;
}

int readIntLE( ) throws IOException
{
int accum = 0;

for ( int shiftBy=0; shiftBy<32; shiftBy+=8 )
{
accum |= ( ds.readByte () & 0xff ) << shiftBy;
}

currentPos+=4;
return accum;
}

String readStr(int size) throws IOException
{

String s = "";
boolean add = true;

for(int l = 0; l < size; l++)
{

char c = (char)ds.readByte();
if(add)
{
if((int)c != 0)
s+=(char)c;
else
add=false;
}
}

currentPos+=size;
return s;
}

void skip(int len) throws IOException
{
currentPos+=len;
ds.skip(len);
}


public static void main(String[] args)
{
Blah blah = new Blah("Global.not");
blah.read();
blah  = new Blah("Multiplayer.not");
blah.read();
}



class NOTTemplateRef
{
int offset = 0;
String name = "";

public NOTTemplateRef(String name, int offset)
{
this.name = name;
this.offset = offset;
}
}
}

Offline Javokis

  • Horses Dick
  • Member
  • *****
  • Posts: 1948
  • Karma: 2
Re: WIP modelling
« Reply #9 on: 2007-07-18, 22:26:01 »
Woah... nice. Tried it... works.

Now do you know how to read from ALL available .NOT files from all loaded .NOB files?
"There's nothing wrong with horses dicks, there's nothing wrong with sucking horses dicks." -Signo

Offline Paine

  • Member
  • *
  • Posts: 20
  • Karma: 0
Re: WIP modelling
« Reply #10 on: 2007-07-19, 00:10:15 »
Woah... nice. Tried it... works.

Now do you know how to read from ALL available .NOT files from all loaded .NOB files?

Of course.

Code: [Select]
import java.io.*;
import java.util.Enumeration;
import java.util.zip.*;

public class Blah
{
File file;

FileInputStream fs;

DataInputStream ds;

NOTTemplateRef refs[];

int currentPos = 0;

String signature = "NOT"+(char)0x10;

public Blah(String filename)
{
File file = new File(filename);
if(file.exists() && file.canRead() && !file.isDirectory())
{
try
{
fs = new FileInputStream(file);
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
else
{
System.out.println("File can't be read.");
}
}

public Blah(DataInputStream input)
{
ds=input;
}

boolean read()
{

try
{
if(ds == null)
ds = new DataInputStream(fs);

String signature = readStr(4);

if(!signature.equalsIgnoreCase(signature))
{
System.out.println("Invalid signature.");
return false;
}


int version = readIntLE();

if(version != 1)
{
System.out.println("Invalid version.");
return false;
}

int numTemplates = readIntLE();


refs = new NOTTemplateRef[numTemplates];

for(int i = 0; i < numTemplates; i++)
{
String name = readStr(32);
int offset = readIntLE();
refs[i] = new NOTTemplateRef(name,offset);
}

for(int i = 0; i < numTemplates; i++)
{
skip(refs[i].offset-currentPos);

int numTags = readIntLE();

for(int j = 0; j < numTags; j++)
{
int tagID = readIntLE();
if(tagID == 4) //MODEL TAG
{
String value=readStr(32);
//System.out.println(refs[i].name+" - MODEL: "+value);
}
else
{
skip(32);
}
}

//Store the template somewhere..
}

ds.close();
}
catch(Exception e)
{
System.out.println("Exception [blah.read()] <"+e.getMessage()+">");
e.printStackTrace();
return false;
}


return true;
}

int readIntLE( ) throws IOException
{
int accum = 0;

for ( int shiftBy=0; shiftBy<32; shiftBy+=8 )
{
accum |= ( ds.readByte () & 0xff ) << shiftBy;
}

currentPos+=4;
return accum;
}

String readStr(int size) throws IOException
{

String s = "";
boolean add = true;

for(int l = 0; l < size; l++)
{

char c = (char)ds.readByte();
if(add)
{
if((int)c != 0)
s+=(char)c;
else
add=false;
}
}

currentPos+=size;
return s;
}

void skip(int len) throws IOException
{
currentPos+=len;
ds.skip(len);
}


public static void main(String[] args)
{
/*Blah blah = new Blah("Global.not");
blah.read();
blah  = new Blah("Multiplayer.not");
blah.read();*/

Blah blah;

String dir = "C:\\Program Files\\Vampire The Masquerade - Redemption\\";

File file = new File(dir);
if(!file.isDirectory())
{
System.out.println("NOT A DIRECTORY");
return;
}

if(!file.exists())
{
System.out.println("DIRECTORY DOESN'T EXIST");
return;
}

if(!file.canRead())
{
System.out.println("CAN'T READ DIRECTORY");
return;
}

String files[] = file.list();

if(files == null)
{
System.out.println("NO FILES IN DIRECTORY");
return;
}

for(int i = 0; i < files.length; i++)
{
if(files[i].endsWith(".nob"))
{
try
{
ZipFile zipfile = new ZipFile(dir+files[i]);
System.out.println(files[i]);
Enumeration e = zipfile.entries();
while(e.hasMoreElements())
{
ZipEntry ze = (ZipEntry)e.nextElement();
if(ze.getName().endsWith(".not"))
{
System.out.println("--- "+ze.getName());
blah = new Blah(new DataInputStream(zipfile.getInputStream(ze)));
blah.read();
}
}

zipfile.close();
}
catch(Exception e)
{
System.out.println("ZIP EXCEPTION: "+e.getMessage());
}
}

}

}



class NOTTemplateRef
{
int offset = 0;
String name = "";

public NOTTemplateRef(String name, int offset)
{
this.name = name;
this.offset = offset;
}
}
}

That will read every .nob file in a directory and the .not files inside.  ;)

Offline ORI

  • Team
  • Member
  • ******
  • Posts: 365
  • Karma: 1
Re: WIP modelling
« Reply #11 on: 2007-07-19, 05:32:48 »

  Finally a UVW unwarp I am happy with, now to begin texturing.

Offline Javokis

  • Horses Dick
  • Member
  • *****
  • Posts: 1948
  • Karma: 2
Re: WIP modelling
« Reply #12 on: 2007-07-20, 00:50:10 »
Woah... nice. Tried it... works.

Now do you know how to read from ALL available .NOT files from all loaded .NOB files?

Of course.

Code: [Select]
import java.io.*;
import java.util.Enumeration;
import java.util.zip.*;

public class Blah
{
File file;

FileInputStream fs;

DataInputStream ds;

NOTTemplateRef refs[];

int currentPos = 0;

String signature = "NOT"+(char)0x10;

public Blah(String filename)
{
File file = new File(filename);
if(file.exists() && file.canRead() && !file.isDirectory())
{
try
{
fs = new FileInputStream(file);
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
else
{
System.out.println("File can't be read.");
}
}

public Blah(DataInputStream input)
{
ds=input;
}

boolean read()
{

try
{
if(ds == null)
ds = new DataInputStream(fs);

String signature = readStr(4);

if(!signature.equalsIgnoreCase(signature))
{
System.out.println("Invalid signature.");
return false;
}


int version = readIntLE();

if(version != 1)
{
System.out.println("Invalid version.");
return false;
}

int numTemplates = readIntLE();


refs = new NOTTemplateRef[numTemplates];

for(int i = 0; i < numTemplates; i++)
{
String name = readStr(32);
int offset = readIntLE();
refs[i] = new NOTTemplateRef(name,offset);
}

for(int i = 0; i < numTemplates; i++)
{
skip(refs[i].offset-currentPos);

int numTags = readIntLE();

for(int j = 0; j < numTags; j++)
{
int tagID = readIntLE();
if(tagID == 4) //MODEL TAG
{
String value=readStr(32);
//System.out.println(refs[i].name+" - MODEL: "+value);
}
else
{
skip(32);
}
}

//Store the template somewhere..
}

ds.close();
}
catch(Exception e)
{
System.out.println("Exception [blah.read()] <"+e.getMessage()+">");
e.printStackTrace();
return false;
}


return true;
}

int readIntLE( ) throws IOException
{
int accum = 0;

for ( int shiftBy=0; shiftBy<32; shiftBy+=8 )
{
accum |= ( ds.readByte () & 0xff ) << shiftBy;
}

currentPos+=4;
return accum;
}

String readStr(int size) throws IOException
{

String s = "";
boolean add = true;

for(int l = 0; l < size; l++)
{

char c = (char)ds.readByte();
if(add)
{
if((int)c != 0)
s+=(char)c;
else
add=false;
}
}

currentPos+=size;
return s;
}

void skip(int len) throws IOException
{
currentPos+=len;
ds.skip(len);
}


public static void main(String[] args)
{
/*Blah blah = new Blah("Global.not");
blah.read();
blah  = new Blah("Multiplayer.not");
blah.read();*/

Blah blah;

String dir = "C:\\Program Files\\Vampire The Masquerade - Redemption\\";

File file = new File(dir);
if(!file.isDirectory())
{
System.out.println("NOT A DIRECTORY");
return;
}

if(!file.exists())
{
System.out.println("DIRECTORY DOESN'T EXIST");
return;
}

if(!file.canRead())
{
System.out.println("CAN'T READ DIRECTORY");
return;
}

String files[] = file.list();

if(files == null)
{
System.out.println("NO FILES IN DIRECTORY");
return;
}

for(int i = 0; i < files.length; i++)
{
if(files[i].endsWith(".nob"))
{
try
{
ZipFile zipfile = new ZipFile(dir+files[i]);
System.out.println(files[i]);
Enumeration e = zipfile.entries();
while(e.hasMoreElements())
{
ZipEntry ze = (ZipEntry)e.nextElement();
if(ze.getName().endsWith(".not"))
{
System.out.println("--- "+ze.getName());
blah = new Blah(new DataInputStream(zipfile.getInputStream(ze)));
blah.read();
}
}

zipfile.close();
}
catch(Exception e)
{
System.out.println("ZIP EXCEPTION: "+e.getMessage());
}
}

}

}



class NOTTemplateRef
{
int offset = 0;
String name = "";

public NOTTemplateRef(String name, int offset)
{
this.name = name;
this.offset = offset;
}
}
}

That will read every .nob file in a directory and the .not files inside.  ;)

Wow. Thanks. I should asked earlier.  ;D

I wont be implimenting it in this Friday release, but I'd like to have it in the future releases.

To ORI:

You do know we have a picture attachment feature, right? I see you figured out the UV Mapper in Blender. I looked at UV Mapping tutorials once or twice, but other than making basic shapes and playing with the lights, I never really used Blender much. My mind always goes blank when I look at any 3d modeling/mapping tool for some reason - hence why I'm not mapping Project Northway right now.
"There's nothing wrong with horses dicks, there's nothing wrong with sucking horses dicks." -Signo

Offline ORI

  • Team
  • Member
  • ******
  • Posts: 365
  • Karma: 1
Re: WIP modelling
« Reply #13 on: 2007-08-07, 05:18:05 »

Offline Javokis

  • Horses Dick
  • Member
  • *****
  • Posts: 1948
  • Karma: 2
Re: WIP modelling
« Reply #14 on: 2007-08-07, 15:30:59 »
What are ya using that for?
"There's nothing wrong with horses dicks, there's nothing wrong with sucking horses dicks." -Signo