Sweet Ever-loving Fark...
Congratulations, Jahrain. You have won The Internet.
Sweet Ever-loving Fark...
Congratulations, Jahrain. You have won The Internet.
:hyper:
BEUTIFLE
+ reputation
Great job! Props to you and whoever helped you.
WOW. I really cant wait for this. Great job.
very fucking nice jah, you are damn talented.
DAY-UMMMMMMMN!
This is a step in the right direction. Hope you can figure out the normals issue, simply out of performance concerns; wouldn't it take a bit more processing time to render a double-sided face? If so, is it negligible?
Again, bravo. It's accomplishments like this that make me put faith into this community. I just hope Microsoft doesn't get its panties in a wad and ban anyone who has a map with custom render_models. :/
oh SNAP.
ftw
that is awesome. keep up the great work bro
+imaginary rep (<3 the rep system)
Thanks guys for the positive feedback.
Well it does eat up more memory as the polygon count is doubled, but as far as performance wise, double sided faces really doesn't impact frame rates that noticeably since either way, the video hardware culls the back sides of the faces during render time.
I have added options to manually flip the individual geometry section parts as the flipped polygons are random but uniform for each different part. Basically, if you load your model into the game, and you notice a certain part of the geometry has flipped triangles, you can go back to the upgrader and set that piece of geometry to have it's faces flipped. A model is divided up into parts based on which shader they used and which LOD they belong to so finding which geometry needs to be flipped isn't hard. So the problem has 2 optional work arounds until I figure out what causes the flipping of the polygons. I want to get a usable beta out as soon as possible and I won't let this problem halt it's release forever if I can't figure it out.
Well they have banned people from halo 2 xbox with such mods, but I doubt theres seriously a way for live to detect if a custom map is using a custom model or not. We will see.
Also, I'm planning on making an obj exporter for .render_model tags for referencing models, nodes, markers etc. Also as i promised, for anyone else who wants to make a importing script for 3ds max, this might help.
That is what I managed to map out for the the structure of the model just to be able to export it, so allot of data block and offset definitions are missing if one is to make an importer from it. But its a good start. It might also help anyone who wants to take a shot of making their own .render_model compiler/exporter. There are a few things that might be incorrect with it, but so far it work for me.Code:render_model structure main size = 264 0x83 = nameStringSize byte 0x104 = compressionInfoBlockCount int32 0x116 = regionBlockCount int32 0x128 = sectionCount int32 0x140 = invalidSectionPairBitCount int32 0x152 = sectionGroupCount int32 0x176 = nodeCount int32 0x200 = markerCount int32 0x212 = shaderCount int32 nameString string(Size = nameStringSize) ImportDataBlock size = 596 CompressedJMSFilesBlock size = 540 0x392 = CompressedJMSFilesBlockSize int32 ZippedJMSDataBlock(s) compressionInfoBlock size = 56 0x0 = positionBoundsMinX float32 0x4 = positionBoundsMaxX float32 0x8 = positionBoundsMinY float32 0x12 = positionBoundsMaxY float32 0x16 = positionBoundsMinZ float32 0x20 = positionBoundsMaxZ float32 0x24 = texCoordsBoundsMinX float32 0x28 = texCoordsBoundMaxX float32 0x32 = texCoordsBoundsMinY float32 0x36 = texCoordsBoundMaxY float32 regionsBlock size = 20 0x3 regionNameStringLenght byte 0x8 = permutationCount int32 permutationBlock size = 16 0x3 = permNameStringLenght byte 0x4 = L1SectionIndex int16 0x6 = L2SectionIndex int16 0x8 = L3SectionIndex int16 0x10 = L4SectionIndex int16 0x12 = L5SectionIndex int16 0x14 = L6SectionIndex int16 permNameString string(permNameStringLenght) regionNameString string(regionNameStringLenght) sectionBlock size = 104 0x4 = totalVertexCount int16 0x6 = totalTriangleCount int16 0x8 = totalPartCount int16 0x10 = shadowTriangleCount int16 0x12 = shadowPartCount int16 0x14 opPointCount int16 0x16 = opVertexCount int16 0x18 = opPartCount int16 0x22 = shadowRigidTriangleCount int16 0x26 = compressFlags 8bitBinary compressBoundsBlock size = 56 0x0 = positionBoundsMinX float32 0x4 = positionBoundsMaxX float32 0x8 = positionBoundsMinY float32 0x12 = positionBoundsMaxY float32 0x16 = positionBoundsMinZ float32 0x20 = positionBoundsMaxZ float32 0x24 = texCoordsBoundsMinX float32 0x28 = texCoordsBoundMaxX float32 0x32 = texCoordsBoundsMinY float32 0x36 = texCoordsBoundMaxY float32 sectionDataBlock size = 180 0x0 = partsBlockCount int32 0x36 = vertexBlockCount int32 0x48 = stripIndexcount int32 0x164 = nodeMapCount int32 partsBlock size = 72 0x6 = stripIndexStartIndex int16 0x8 = stripIndexLenght int16 0x14 = maxNodesPerVertex int16 0x16 = centroidX float32 0x20 = centroidY float32 0x24 = centriodZ float32 rawVertexBlock size = 196 0x0 = vertexX float32 0x4 = vertexY float32 0x8 = vertexZ float32 0x28 = node0Weight float32 0x32 = node1weight float32 0x36 = node2weight float32 0x40 = node3weight float32 0x44 = node0index int32 0x48 = node1index int32 0x52 = node2index int32 0x56 = node3index int32 0x68 = texCoordx float32 0x72 = texCoordy float32 0x76 = normalI float32 0x80 = normalJ float32 0x84 = normalk float32 0x88 = binormalI float32 0x92 = binormalJ float32 0x96 = binormalK float32 0x100 = tangentI float32 0x104 = tangentJ float32 0x108 = tangentk float32 stripIndexBlock size = 2 0x0 = vertexIndex int16 nodeMapBlock size = 1 0x0 = nodeIndex byte sectionGroupBlock size = 16 nodeBlock size = 96 0x3 = nodeNameStringLength byte 0x4 = parentNodeIndex int16 0x6 = firstChildNodeIndex int16 0x8 = nextSibblingNodeIndex int16 0x10 = importNodeIndex int16 0x12 = translationX float32 0x16 = translationY float32 0x20 = translationZ float32 0x24 = rotationI float32 0x28 = rotationJ float32 0x32 = rotationK float32 0x36 = rotationW float32 0x40 = inverseForwardI float32 0x44 = inverseForwardK float32 0x48 = inverseForwardJ float32 0x52 = inverseLeftI float32 0x56 = inverseLeftJ float32 0x60 = inverseLeftK float32 0x64 = inverseUpI float32 0x68 = inverseUpJ float32 0x72 = inverseUpK float32 0x76 = inversePositionX float32 0x80 = inversePositionY float32 0x84 = inversePositionZ float32 0x88 = inverseScale float32 0x92 = distanceFromParent float32 markerGroupBlock size = 16 0x3 = markerNameString 0x4 = markerInstanceCount int32 markersBlock size = 36 0x1 = regionIndex byte 0x2 = permutationIndex byte 0x3 = nodeIndex byte 0x4 = translationX float32 0x8 = translationY float32 0x12 = translationZ float32 0x16 = rotationI float32 0x20 = rotationJ float32 0x24 = rotationK float32 0x28 = rotationW float32 0x32 = scale float32 MarkerNameString string shaderBlock size = 52 0x24 = shaderStringLength byte shaderStrings string(shaderStringLength)
Last edited by jahrain; July 7th, 2007 at 06:09 AM.
On another note, Heres my first success with the first none h2 weapon model ingame. Btw, ignore 10 second job shaders.
![]()
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks