XaiJu
VulkanRipper
VulkanRipper

patreon


OpenGL Ripper 0.9.5 (32/64 bit) manual


OpenGL ripper presented by two files : wrapper - opengl32.dll and config - gl_config.xml (32 and 64 bit versions).
Move these files to folder with app you want rip from.
Create output folder (for shader, meshes and textures) and put path value into gl_config.xml.

Now decide what you want to rip- pre shader (T-pose, A-Pose , fragments) or post shader (transformed mesh like on screen). For preshader set parameters bLocalSpace = "true" and method = "GLSL_VARYING"

 If you want post shader rip (default) select bLocalSpace = "false" and method = "GLSL_GLOBAL_VARYING".


If game you desire to rip is old (non GLSL) or uses vertex program assembly (which may exacly be determined by shader dump) use method = "FIXED_FUNCTION_VARYING". This feature supported only by NVIDIA gpus.


Select output format for mesh. select bNRFormat = "true" if you want NR(ninjaripper format) or bNRFormat = "false" for GLTF output.

SHADER CACHE SHOULD BE REMOVED -or- DISABLED for your game before rip.

For example for Ryujinx NSW emulator:

For RPCS3 PS3 emulator:

if you want ripper unproject your mesh using projection matrix your suggested

select bUnproject = "true" and  bUserProjectionMatrix = "true" and put your matrix.

Or you may fill params of projection matrix like fov, width, height etc and set  bUserProjectionMatrix = "false" UnprojectMethod = "UNPROJECT_USERFOV" and ripper will unproject mesh for you.

or UnprojectMethod = "UNPROJECT_FIXED" if game uses GL_PROJECTION matrix (old games which use Hardware Transform "Fixed TnL").

If you dont want unproject just select bUnproject = "false" and   bUserProjectionMatrix = "false".

Use Print Screen key or Win+F12 or click on ripper taskbar icon and select START RIP from popup menu. 

For NOX emulator should place ripper files in folder:

C:\Program Files (x86)\Bignox\BigNoxVM\RT

Ensure of use OpenGL API output by NOX

When running bluestacks "NOX profile enabled" string appears in log file.

For Bluestacks emulator should place ripper files in folder:

C:\Program Files\BlueStacks_nxt

Ensure of use OpenGL API output by Bluestacks
Note: Bluestacks and NOX are OS Android emulators which is multitasking OS. Hence exist cuncurrent sets of draw operations of different processes to single screen. While ripper requests transformed meshes OpenGL driver produces delays, in other side emulator flushes input in a time before swaps backbuffer, hence not all draw operations may be captured in one frame. In this case you should rip more than one frame, so called "forced rip". To enable forced rip set bForceRip ="true" and set desirable frames count  (force_rip_count), 3-5 frames will be enough in most cases.
When running bluestacks "Bluestacks profile enabled" string appears in log file.

For ripping browser output (e.g. sketchfab) use Firefox in Bluestacks/Nox.

Note: 3d object should moving to ensure backbuffer will swapped (ripper need frame change to determine 3d scene limits). Preferable movement using mouse scroll + printscreen.
Sketchfab uses uniforms to delivery projection matrix, this matrix located in log file "Matrix4fv". Use program index from mesh name (progXXX, where XXX is the index). For details look video https://www.youtube.com/watch?v=8NqLnSdHzUQ

OTHER PARAMETERS ARE:

max_tfb_vars - maximum vertex attributes (1-15) in case you want reduce mesh size

bDiscardOnlyPositionMesh - if true mesh with only vertex position attribute will be discarded (usefull for removing occlusion querries)

bDiscardOrthoMesh - if true mesh with w=1 will be discarded (which commonly interface elements, shadows , etc)

bLogEnable - log switch

bGLTraceLog - OpenGL api logging

bDumpShaderSource - if you want dump shaders

bDumpOnlyVertexShaderSource - if you want dump only vertex shaders

bDumpTextures - if you want dump textures

bTextureVerticalFlip - flip textures vertically

bRuntimeTextureDump - make own copy of textures for every mesh (extremal consumption of disk space and RAM for blender)

bDisableCullFace - if you want discard API polygon culling


force_normal_id_string - treat this string (exactly) as normal attribute name in NR/GLTF files

force_texcoord_id_string - if this string appear in attribute name it will be treated as texture coordinates in NR/GLTF files

force_normal_id - index of attribute which will be treated as normal in NR/GLTF files (if force_normal_id_string is not defined)

force_texcoord_id - index of attribute which will be treated as texture coordinates in NR/GLTF files (if force_texcoord_id_string is not defined)

 bSingleTfb - if true one single 2GB (API limit) buffer will be used to store transformed meshes (recomended if meshes are fit into buffer size), if false smaller buffer for every mesh will be used and ripper will wait subsequently transform of every mesh (slow but size unlimited).

bLogo - ripper logo

bLogWhenRip - trace api when rip

bUseAppProfiles - Use App profiles (NOX/Bluestacks/Second Life Firestorm)

activation_code - your activation code (mandatory)

Sphere injection (experimental):

sphere_radius - radius of injected sphere , if zero (default) sphere not injected

sphere_index - index of the ripped mesh after which sphere be injected, note in non static scenes the index probably will belong to other mesh

sphere_stride - stride of vertex attributes (size of one vertex attributes)

sphere_posattr_offset - offset of vertex position attribute in bytes in stride

last two parameters known from analization of pre-shader(t-pose) ripping pass in blender.

  

INNTERPRETATION OF RESULS IN PRE-SHADER MODE

Let us rip "Hyrule Wariors: Definitive Edition" using ryujinx emulator.

After rip process ended we have NR(or GLTF if selected) files and textures in our output folder

Next step is importing meshes (NR-files) using NR importer for blender in local space(T-pose).

We see arbitrary meshes. By the way this is Link character body.

This because first attribute is not vertex position. Checking UVs.

 We see that position attribute has index 2. So wee need reload with this index (look at the right upper corner).

 Now we have ordinal meshes. They all centered in the origin.

 Let us find Link character. Deleting unnecessary meshes we find all warriors at the origin (and swords!).

Going deeper

We found him. Next step select right UVs and textures from texture slots.

Done!

OpenGL Ripper 0.9.5 (32/64 bit) manual OpenGL Ripper 0.9.5 (32/64 bit) manual

More Creators