Shenmue, character models, locations etc.

(Modding and other series related projects)

Re: Shenmue, character models, locations etc.

Postby Esppiral » Sun Aug 09, 2015 2:34 pm

Shenfa's House. Pretty amazing level of geometry in this map.

Image

Close ups.
Image

Image

Image

Image

Image

Image

Image

Image

Image
Link.

https://mega.nz/#!oFJhFaYY!8oGEqRE9L9y0 ... PR-4Xrr9QU

Esppiral has received 4 thanks from: fittersau, johnvivant, MiTT3NZ, Yokosuka
User avatar
Esppiral
Alpha Trading Boss
Alpha Trading Boss
 
Joined: May 2012
PSN: Esppiral
XBL: Esppiral
Steam: Esppiral
Favorite title: Shenmue
Currently playing: The Witcher 2

Re: Shenmue, character models, locations etc.

Postby ReeceKun » Sun Aug 09, 2015 4:54 pm

Esppiral wrote: Shenfa's House. Pretty amazing level of geometry in this map.

How did you get shenmue 2 model maps?
Or is that just fixed 3d ripper rips?
User avatar
ReeceKun
Man Mo Acolyte
Man Mo Acolyte
 
Joined: November 2009
Location: North Wales (UK)
Favorite title: Shenmue
Currently playing: Skyrim

Re: Shenmue, character models, locations etc.

Postby Esppiral » Sun Aug 09, 2015 9:19 pm

Yes I used 3rd Ripper, you can get "all" the geometry from Shenmue 2 using it, specially with"little" maps like this one. Or Man Mo temple.

It helps that during one of the in game custcenes with Shenfa the camera pans out allowing to capture a huge portion of this map. Anyway I used 8 different rips to complete the surroundings, and the inside house.
Placing Ryo at different positions is key to capture everything.
For example the outer ring(background image) isn't missing geometry like in the shenmue1 maps it is only modeled what will be visible.

Think of any cutscene with camera pans and then you have a great chance of getting an easy rip, as an example, Worker's Pier, The Yellow Building and Dragon Street should be easy to rip too.

The hard part is fixing the geometry proportions and make it fit with the other ripped segments to build the full Map, it is possible but very time consuming.

Esppiral has received 2 thanks from: fittersau, ReeceKun
User avatar
Esppiral
Alpha Trading Boss
Alpha Trading Boss
 
Joined: May 2012
PSN: Esppiral
XBL: Esppiral
Steam: Esppiral
Favorite title: Shenmue
Currently playing: The Witcher 2

Re: Shenmue, character models, locations etc.

Postby Fenix » Mon Aug 10, 2015 12:02 pm

Excellent rips.
User avatar
Fenix
"After Burner...Great!"
"After Burner...Great!"
 
Joined: June 2010
Location: Spain, Barcelona
Favorite title: Shenmue II
Currently playing: 3D Studio Max

Re: Shenmue, character models, locations etc.

Postby ReeceKun » Mon Aug 10, 2015 3:49 pm

Might be a good idea to look into the Null DC cheater and create some Camera Hack Codes , I did the same thing for Silent Hill for the PSX (old project not in development)
Image
User avatar
ReeceKun
Man Mo Acolyte
Man Mo Acolyte
 
Joined: November 2009
Location: North Wales (UK)
Favorite title: Shenmue
Currently playing: Skyrim

Re: Shenmue, character models, locations etc.

Postby fittersau » Tue Aug 11, 2015 8:14 am

@esppiral, who is this guy.. :lol:

Image
User avatar
fittersau
Man Mo Acolyte
Man Mo Acolyte
 
Joined: July 2015

Re: Shenmue, character models, locations etc.

Postby MiTT3NZ » Tue Aug 11, 2015 11:02 am

Wait, 3DRipperX doesn't distort the models anymore?
User avatar
MiTT3NZ
Class A Cunt
Shenmue III
 
Joined: January 2005
Location: Manchester, innit!
XBL: Mittens2317
Steam: Mittens2317
Favorite title: Shenmue
Currently playing: Football Manager 2012

Re: Shenmue, character models, locations etc.

Postby ReeceKun » Tue Aug 11, 2015 11:11 am

MiTT3NZ wrote: Wait, 3DRipperX doesn't distort the models anymore?

no 3D ripper is same as it ever was

Although someone did make a 3ds max plugin to help re-align the XYZ but i never got it to work the way I wanted it to, Demul and Ninja Ripper could be another option but I dont think Demul uses a 'stereoscopic plugin'
User avatar
ReeceKun
Man Mo Acolyte
Man Mo Acolyte
 
Joined: November 2009
Location: North Wales (UK)
Favorite title: Shenmue
Currently playing: Skyrim

Re: Shenmue, character models, locations etc.

Postby Esppiral » Tue Aug 11, 2015 12:53 pm

MiTT3NZ wrote: Wait, 3DRipperX doesn't distort the models anymore?



It does, I manually fix them.

ReeceKun wrote:
Although someone did make a 3ds max plugin to help re-align the XYZ but i never got it to work the way I wanted it to, Demul and Ninja Ripper could be another option but I dont think Demul uses a 'stereoscopic plugin'


Really? I need it, It could save me a lot of time!!!

Demul, does not have a stereo plugin, but you can rip meshes with demul and Ninja Ripper, but only those that have an alpha texture, so it is useless since most of the meshes don't have transparent textures.
Last edited by Esppiral on Tue Aug 11, 2015 12:58 pm, edited 1 time in total.
User avatar
Esppiral
Alpha Trading Boss
Alpha Trading Boss
 
Joined: May 2012
PSN: Esppiral
XBL: Esppiral
Steam: Esppiral
Favorite title: Shenmue
Currently playing: The Witcher 2

Re: Shenmue, character models, locations etc.

Postby MiTT3NZ » Tue Aug 11, 2015 12:54 pm

Esppiral wrote:
MiTT3NZ wrote: Wait, 3DRipperX doesn't distort the models anymore?



I does, I manually fix them.


You're either very patient, very dedicated, or have a magical watch with the ability to stop time. I sincerely hope it's the latter and that you're willing to sell it.
User avatar
MiTT3NZ
Class A Cunt
Shenmue III
 
Joined: January 2005
Location: Manchester, innit!
XBL: Mittens2317
Steam: Mittens2317
Favorite title: Shenmue
Currently playing: Football Manager 2012

Re: Shenmue, character models, locations etc.

Postby Esppiral » Tue Aug 11, 2015 12:58 pm

:rotflmao:
User avatar
Esppiral
Alpha Trading Boss
Alpha Trading Boss
 
Joined: May 2012
PSN: Esppiral
XBL: Esppiral
Steam: Esppiral
Favorite title: Shenmue
Currently playing: The Witcher 2

Re: Shenmue, character models, locations etc.

Postby ReeceKun » Tue Aug 11, 2015 1:32 pm

XYZ Plugin - Found it ! (save as .py)
Works with Blender & requires Python
http://www.tombraiderforums.com/showpos ... ostcount=4
Image
Code: Select all
#!BPY

"""
Name: 'Correct3DRipper'
Blender: 248
Group: 'Mesh'
"""

__author__ = "Dusan Pavlicek"
__email__ = "[email protected]"

import Blender
import math

from Blender import *
from Blender.Mathutils import *


BUTTON_ASSIGN_GROUND = 1
BUTTON_ASSIGN_FRONT = 2
BUTTON_ASSIGN_SIDE = 3
BUTTON_ADJUST_SCALES = 4
BUTTON_ALIGN_PLANES = 5

SELECTED_VERTS_GROUND = []
SELECTED_VERTS_FRONT = []
SELECTED_VERTS_SIDE = []

AXIS_X = 1
AXIS_Y = 2
AXIS_Z = 3

PLANE_XY = 1
PLANE_XZ = 2
PLANE_YZ = 3


def GetVisibleMeshObjects():
   editmode = Window.EditMode()
   Window.EditMode(0)
   meshObjects = []
   scene = Scene.GetCurrent()
   if scene != None:
      for object in scene.objects:
         if object.type != 'Mesh':
            continue
         visible = False
         for objectLayer in object.layers:
            if objectLayer in scene.layers:
               visible = True
               break
         if not visible:
            continue
         meshObjects.append(object)
   Window.EditMode(editmode)
   return meshObjects

   
def GetSelectedVisibleMeshObjects():
   editmode = Window.EditMode()
   Window.EditMode(0)
   meshObjects = []
   scene = Scene.GetCurrent()
   if scene != None:
      for object in scene.objects:
         if not object.sel:
            continue
         if object.type != 'Mesh':
            continue
         visible = False
         for objectLayer in object.layers:
            if objectLayer in scene.layers:
               visible = True
               break
         if not visible:
            continue
         meshObjects.append(object)
   Window.EditMode(editmode)
   return meshObjects


def GetMeshFromObject(object):
   if object.type != 'Mesh':
      return None
   return object.getData(mesh=True)


def GetSelectedVisibleVertices(onlySelectedMeshes):
   vertices = []
   if onlySelectedMeshes:
      objects = GetSelectedVisibleMeshObjects()
   else:
      objects = GetVisibleMeshObjects()
   for object in objects:
      objectMatrix = object.getMatrix()
      mesh = GetMeshFromObject(object)
      for vertex in mesh.verts:
         if not vertex.sel:
            continue
         if vertex.hide:
            continue
         vertices.append([object, vertex])
   return vertices


def CalcScaleTransform(axis, p1, p2, p3, q1, q2, q3):
   a = Vector(p2.x - p1.x, p2.y - p1.y, p2.z - p1.z)
   b = Vector(p3.x - p1.x, p3.y - p1.y, p3.z - p1.z)
   c = Vector(q2.x - q1.x, q2.y - q1.y, q2.z - q1.z)
   d = Vector(q3.x - q1.x, q3.y - q1.y, q3.z - q1.z)
   u = (a.y * b.z - a.z * b.y) * (c.y * d.z - c.z * d.y)
   v = (a.z * b.x - a.x * b.z) * (c.z * d.x - c.x * d.z)
   w = (a.x * b.y - a.y * b.x) * (c.x * d.y - c.y * d.x)
   sx = 1
   sy = 1
   sz = 1
   if axis == AXIS_X:
      if v + w != 0:
         t = -u / (v + w)
      else:
         t = -1
      if t > 0:
         s = math.sqrt(t)
         sx = s
   elif axis == AXIS_Y:
      if u + w != 0:
         t = -v / (u + w)
      else:
         t = -1
      if t > 0:
         s = math.sqrt(t)
         sy = s
   elif axis == AXIS_Z:
      if u + v != 0:
         t = -w / (u + v)
      else:
         t = -1
      if t > 0:
         s = math.sqrt(t)
         sz = s
   if t > 0:
      Draw.PupMenu('Axis scale multiplied by %f.' % s)
      if s == 1:
         return None
   else:
      if abs(u + v + w) < 1e-4:
         Draw.PupMenu('Planes are already perpendicular.')
      else:
         Draw.PupMenu('Sorry, I cannot make the two planes perpendicular.')
      return None
   return ScaleMatrix(sx, sy, sz)


def ScaleMatrix(sx, sy, sz):
   return Matrix(
      [sx, 0, 0, 0],
      [0, sy, 0, 0],
      [0, 0, sz, 0],
      [0, 0, 0, 1])


def CorrectAxisScale(axis, selectedVerts1, selectedVerts2):
   Window.WaitCursor(1)
   matrix = CalcScaleTransform(
         axis,
         selectedVerts1[0][1].co * selectedVerts1[0][0].getMatrix(),
         selectedVerts1[1][1].co * selectedVerts1[1][0].getMatrix(),
         selectedVerts1[2][1].co * selectedVerts1[2][0].getMatrix(),
         selectedVerts2[0][1].co * selectedVerts2[0][0].getMatrix(),
         selectedVerts2[1][1].co * selectedVerts2[1][0].getMatrix(),
         selectedVerts2[2][1].co * selectedVerts2[2][0].getMatrix())
   if matrix != None:
      objects = GetVisibleMeshObjects()
      for object in objects:
         object.setMatrix(object.getMatrix() * matrix)
   Window.WaitCursor(0)
   Redraw()
   return


def CalcPlaneNormal(p1, p2, p3):
   u = Vector([p2.x - p1.x, p2.y - p1.y, p2.z - p1.z])
   v = Vector([p3.x - p1.x, p3.y - p1.y, p3.z - p1.z])
   return CrossVecs(u, v).normalize()


def CalcRotationTransform(p1, p2, p3, alignPlane):
   if alignPlane == PLANE_XY:
      i = Vector(0, 0, 1)
   elif alignPlane == PLANE_XZ:
      i = Vector(0, 1, 0)
   elif alignPlane == PLANE_YZ:
      i = Vector(1, 0, 0)

   normalPos = CalcPlaneNormal(p1, p2, p3)
   normalNeg = -normalPos
   anglePos = AngleBetweenVecs(normalPos, i)
   angleNeg = AngleBetweenVecs(normalNeg, i)
   if anglePos < angleNeg:
      angle = anglePos
      normal = normalPos
   else:
      angle = angleNeg
      normal = normalNeg

   if alignPlane == PLANE_XY:
      axis = Vector([-normal.y, normal.x, 0])
   elif alignPlane == PLANE_XZ:
      axis = Vector([-normal.z, 0, normal.x])
   elif alignPlane == PLANE_YZ:
      axis = Vector([0, -normal.z, normal.y])
   if axis.length < 1e-5:
      return Matrix().resize4x4().identity()

   matrixPos = RotationMatrix(+angle, 4, 'r', axis)
   matrixNeg = RotationMatrix(-angle, 4, 'r', axis)
   testPos = normal * matrixPos
   testNeg = normal * matrixNeg
   anglePos = AngleBetweenVecs(testPos, i)
   angleNeg = AngleBetweenVecs(testNeg, i)
   if anglePos < angleNeg:
      matrix = matrixPos
   else:
      matrix = matrixNeg
   return matrix


def CalcAlignTransform(p1, p2, p3, alignPlane):
   matrixRot = CalcRotationTransform(p1, p2, p3, alignPlane)
   test = p1 * matrixRot
   if alignPlane == PLANE_XY:
      matrixTrans = TranslationMatrix(Vector(0, 0, -test.z))
   elif alignPlane == PLANE_XZ:
      matrixTrans = TranslationMatrix(Vector(0, -test.y, 0))
   elif alignPlane == PLANE_YZ:
      matrixTrans = TranslationMatrix(Vector(-test.x, 0, 0))
   return matrixRot * matrixTrans


def AlignGeometry(p1, p2, p3, alignPlane):
   Window.WaitCursor(1)
   matrix = CalcAlignTransform(p1, p2, p3, alignPlane)
   objects = GetVisibleMeshObjects()
   for object in objects:
      object.setMatrix(object.getMatrix() * matrix)
   Window.WaitCursor(0)
   Redraw()
   return


def DrawGUI():
   YPOS = 360
   BGL.glClear(BGL.GL_COLOR_BUFFER_BIT)
   BGL.glColor3f(0, 0, 0)
   
   BGL.glRasterPos2d(10, YPOS)
   Draw.Text('This script adjusts scales of X, Y and Z axes so that')
   BGL.glRasterPos2d(10, YPOS - 15)
   Draw.Text('the specified ground, front and side planes become')
   BGL.glRasterPos2d(10, YPOS - 30)
   Draw.Text('perpendicular.')
   BGL.glRasterPos2d(10, YPOS - 45)
   Draw.Text('It also aligns the ground plane with the XY plane.')

   BGL.glRasterPos2d(10, YPOS - 80)
   Draw.Text('1) For each plane, select three vertices and click')
   BGL.glRasterPos2d(25, YPOS - 95)
   Draw.Text('a button to define the corresponding plane:')

   Draw.Button('Assign GROUND plane', BUTTON_ASSIGN_GROUND, 25, YPOS - 130, 150, 20)
   Draw.Button('Assign FRONT plane', BUTTON_ASSIGN_FRONT, 25, YPOS - 155, 150, 20)
   Draw.Button('Assign SIDE plane', BUTTON_ASSIGN_SIDE, 25, YPOS - 180, 150, 20)

   BGL.glRasterPos2d(10, YPOS - 205)
   Draw.Text('2) Then press the button to automatically')
   BGL.glRasterPos2d(25, YPOS - 220)
   Draw.Text('adjust all three axis scales.')

   Draw.Button('Adjust axes scales', BUTTON_ADJUST_SCALES, 25, YPOS - 255, 150, 20)

   BGL.glRasterPos2d(10, YPOS - 280)
   Draw.Text('3) Then press the button to automatically align')
   BGL.glRasterPos2d(25, YPOS - 295)
   Draw.Text('the three planes with the world coordinate system.')

   Draw.Button('Align planes', BUTTON_ALIGN_PLANES, 25, YPOS - 330, 150, 20)
   return


def HandleEvent(event, value):
   if event == Draw.ESCKEY:
      Draw.Exit()
   return


def HandleButton(button):
   global SELECTED_VERTS_GROUND
   global SELECTED_VERTS_FRONT
   global SELECTED_VERTS_SIDE

   if button == BUTTON_ASSIGN_GROUND:
      SELECTED_VERTS_GROUND = GetSelectedVisibleVertices(True)
      if len(SELECTED_VERTS_GROUND) != 3:
         Draw.PupMenu('Select exactly 3 vertices please.')
      return
   if button == BUTTON_ASSIGN_FRONT:
      SELECTED_VERTS_FRONT = GetSelectedVisibleVertices(True)
      if len(SELECTED_VERTS_FRONT) != 3:
         Draw.PupMenu('Select exactly 3 vertices please.')
      return
   if button == BUTTON_ASSIGN_SIDE:
      SELECTED_VERTS_SIDE = GetSelectedVisibleVertices(True)
      if len(SELECTED_VERTS_SIDE) != 3:
         Draw.PupMenu('Select exactly 3 vertices please.')
      return
   if button == BUTTON_ADJUST_SCALES:
      if len(SELECTED_VERTS_GROUND) == 0:
         Draw.PupMenu('Assign GROUND plane please.')
         return
      if len(SELECTED_VERTS_FRONT) == 0:
         Draw.PupMenu('Assign FRONT plane please.')
         return
      if len(SELECTED_VERTS_SIDE) == 0:
         Draw.PupMenu('Assign SIDE plane please.')
         return
      CorrectAxisScale(AXIS_Y, SELECTED_VERTS_GROUND, SELECTED_VERTS_FRONT)
      CorrectAxisScale(AXIS_X, SELECTED_VERTS_FRONT, SELECTED_VERTS_SIDE)
      CorrectAxisScale(AXIS_Z, SELECTED_VERTS_GROUND, SELECTED_VERTS_SIDE)
      return
   if button == BUTTON_ALIGN_PLANES:
      if len(SELECTED_VERTS_GROUND) == 0:
         Draw.PupMenu('Assign GROUND plane please.')
         return
      if len(SELECTED_VERTS_FRONT) == 0:
         Draw.PupMenu('Assign FRONT plane please.')
         return
      p1 = SELECTED_VERTS_GROUND[0][1].co * SELECTED_VERTS_GROUND[0][0].getMatrix()
      p2 = SELECTED_VERTS_GROUND[1][1].co * SELECTED_VERTS_GROUND[1][0].getMatrix()
      p3 = SELECTED_VERTS_GROUND[2][1].co * SELECTED_VERTS_GROUND[2][0].getMatrix()
      AlignGeometry(p1, p2, p3, PLANE_XY)
      p1 = SELECTED_VERTS_FRONT[0][1].co * SELECTED_VERTS_FRONT[0][0].getMatrix()
      p2 = SELECTED_VERTS_FRONT[1][1].co * SELECTED_VERTS_FRONT[1][0].getMatrix()
      p3 = SELECTED_VERTS_FRONT[2][1].co * SELECTED_VERTS_FRONT[2][0].getMatrix()
      AlignGeometry(p1, p2, p3, PLANE_XZ)
      return
   return


def Main():
   Draw.Register(DrawGUI, HandleEvent, HandleButton)
   return


Main()

He's turned it into a blender script now ( I hate blender but it might work better than the 3ds max one i used)
User avatar
ReeceKun
Man Mo Acolyte
Man Mo Acolyte
 
Joined: November 2009
Location: North Wales (UK)
Favorite title: Shenmue
Currently playing: Skyrim

Re: Shenmue, character models, locations etc.

Postby Esppiral » Tue Aug 11, 2015 3:06 pm

The plugin does not work for me, anytime I run the script it says "Python script fail, look in the console for now..."

??? any idea? Do you have the 3ds max script?
User avatar
Esppiral
Alpha Trading Boss
Alpha Trading Boss
 
Joined: May 2012
PSN: Esppiral
XBL: Esppiral
Steam: Esppiral
Favorite title: Shenmue
Currently playing: The Witcher 2

Re: Shenmue, character models, locations etc.

Postby ReeceKun » Tue Aug 11, 2015 3:47 pm

Esppiral wrote: The plugin does not work for me, anytime I run the script it says "Python script fail, look in the console for now..."


Usually its because you have the wrong versions of Blender &/or Python
The Script says Blender 2.48
http://download.blender.org/release/Blender2.48/
And python 2.5.2
https://www.python.org/downloads/windows/

not whatever the latest versions are... just another reason for me to hate blender ](*,)

I contacted Dusan on TR forums and asked for the 3ds max version but got no reply
Last edited by ReeceKun on Fri Dec 18, 2015 3:04 pm, edited 1 time in total.

ReeceKun has received a thanks from: Esppiral
User avatar
ReeceKun
Man Mo Acolyte
Man Mo Acolyte
 
Joined: November 2009
Location: North Wales (UK)
Favorite title: Shenmue
Currently playing: Skyrim

Re: Shenmue, character models, locations etc.

Postby Esppiral » Wed Aug 12, 2015 5:11 am

Thanks reecekun, I managed to make it work, everything is perfectly aligned (take a look at those big boxes)

Image


But blender is the shittiest program I've ever used, I hate it too.Also, no matter what if I use blender I lose all the textures, so it is useless to me, because retexturing everything againt takes longer than manually fixing the geometry. ](*,)

Hoping fot the 3DS max script :oops:

Esppiral has received 2 thanks from: MiTT3NZ, ReeceKun
User avatar
Esppiral
Alpha Trading Boss
Alpha Trading Boss
 
Joined: May 2012
PSN: Esppiral
XBL: Esppiral
Steam: Esppiral
Favorite title: Shenmue
Currently playing: The Witcher 2

PreviousNext

Return to Community Projects

Who is online

Users browsing this forum: Google [Bot] and 1 guest

Powered by phpBB © 2000-
ShenmueDojo.net