Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Unread
    • Recent
    • Tags
    • Users
    • Login
    1. Maxon Developers Forum
    2. kisaf
    3. Best
    K
    • Profile
    • Following 1
    • Followers 1
    • Topics 10
    • Posts 23
    • Best 3
    • Controversial 0
    • Groups 0

    Best posts made by kisaf

    • Script : Harden edges of all UV borders (break Phong shading)

      Hi, I'd like to present you a simple script.
      It let you automatically select all UV borders and break their Phong shading, that might be useful for game modeling, especially with hardsurface props.
      More info about hard edges - http://www.polycount.com/forum/showthread.php?t=107196

      Unfortunately, the 'Texture View' window must be opened at least once for properly work 😞
      Just close 'Texture View' and continue work.

      Video:

      Download link: https://github.com/rocketjump4d/UV2PhongEdges

      posted in General Talk
      K
      kisaf
    • RE: Script : Harden edges of all UV borders (break Phong shading)

      Hello guys,
      I rewritten script UV2PhongEdges (weird name, I know :D) from scratch. Now it should works much faster. Also UNDO finally works, yyyeeeey!

      You can download it here
      https://github.com/rocketjump4d/UV2PhongEdges

      And here is an example

      Also, if you just need to get edges indexes of all UV borders you can use this code:

      import c4d
      from c4d import utils
      
      def GetUVBorders(obj):
          edgesIndexes = set()
          abcd = tuple("abcd")
      
          tuvw = obj.GetTag(c4d.Tuvw)
          nbr = utils.Neighbor()
          nbr.Init(obj)
      
          # Create empty set for `edgesVV`
          # In this case `edgeVV` means `Edge between Vertex0 and Vertex1 (edgeVertexVertex)`
          # edgeVV is just a tuple(v0, v1), where v0 is index of the first vertex
          # and v1 is the second one
          allEdgesVV = set()
      
          for i in xrange(obj.GetPointCount()):
              # Find neighbor vertex for this one
              neighborIndexes = nbr.GetPointOneRingPoints(i)
      
              for ni in neighborIndexes:
                  edgeTuple = (i, ni)
                  allEdgesVV.add(edgeTuple)
      
          # At this point I've got a set of all `edgesVV` of the object
          # Something like this:
          # (0, 3)
          # (0, 5)
          # (5, 1)
      
          for edgeVV in allEdgesVV:
              # Find neighbour polygons for this edge
              # I called them polyA and polyB
              polyAIndex, polyBIndex = nbr.GetEdgePolys(edgeVV[0], edgeVV[1])
              polyA = obj.GetPolygon(polyAIndex)
      
              if polyBIndex is c4d.NOTOK:
                  # There is no polyB. It means that this edge is border of the object
      
                  # eiA stands for `Edge Index in polyA for current edgeVV`
                  eiA = polyAIndex * 4 + polyA.FindEdge(edgeVV[0], edgeVV[1])
                  edgesIndexes.add(eiA)
                  continue
      
              polyB = obj.GetPolygon(polyBIndex)
      
              # piA0 stands for `Point Index in polyA for vertex edgeVV[0]`
              # the same for others
              piA0 = polyA.Find(edgeVV[0])
              piA1 = polyA.Find(edgeVV[1])
              piB0 = polyB.Find(edgeVV[0])
              piB1 = polyB.Find(edgeVV[1])
      
              # Replace "d" (3) to "c" (2) if polygon is triangle
              if polyA.IsTriangle() and piA0 == 3:
                  piA0 = 2
              if polyA.IsTriangle() and piA1 == 3:
                  piA1 = 2
              if polyB.IsTriangle() and piB0 == 3:
                  piB0 = 2
              if polyB.IsTriangle() and piB1 == 3:
                  piB1 = 2
      
              # Get UV coordinates for each point in each polygon
              uvCoordA0 = tuvw.GetSlow(polyAIndex)[abcd[piA0]]
              uvCoordA1 = tuvw.GetSlow(polyAIndex)[abcd[piA1]]
              uvCoordB0 = tuvw.GetSlow(polyBIndex)[abcd[piB0]]
              uvCoordB1 = tuvw.GetSlow(polyBIndex)[abcd[piB1]]
      
              if uvCoordA0 != uvCoordB0 or uvCoordA1 != uvCoordB1:
                  eiA = polyAIndex * 4 + polyA.FindEdge(edgeVV[0], edgeVV[1])
                  eiB = polyBIndex * 4 + polyB.FindEdge(edgeVV[0], edgeVV[1])
                  edgesIndexes.add(eiA)
                  edgesIndexes.add(eiB)
      
          return edgesIndexes
      

      Let me know if you find bugs.
      Btw, sorry any mistakes. My English is... meh

      posted in General Talk
      K
      kisaf
    • RE: Is there a script/plugin for converting UV borders to Phong Edges?

      I've wrote it by myself 🙂
      Its presentation is here: https://developers.maxon.net/forum/topic/11336/script-harden-edges-of-all-uv-borders-break-phong-shading
      May be it'll be useful for someone
      Cheers

      posted in General Talk
      K
      kisaf