{ "info": { "author": "Daniel Holden, Paul Greveson", "author_email": "contact@theorangeduck.com", "bugtrack_url": null, "classifiers": [], "description": "xNormal Wrapper\n===============\n\nThis is a wrapper for the program xNormal that allows for easy scripting and automation.\n\nIt is licensed under BSD\n\nFor any issues feel free to contact me at:\n\n`contact@theorangeduck.com`\n\nBasic Usage\n-----------\n\nThe below generates a normal map and ambient occlusion map for the piano meshes.\n\n```python\nimport xNormal\nxNormal.run(\"piano_high.obj\", \"piano_low.obj\", \"piano.png\", \n\t\t\t width=256, height=256, gen_normals = True, gen_ao = True)\n```\n\nExtended Usage 1\n----------------\n\nThe belows shows some more features.\n\nFirst the path is set. By default the wrapper assumes `xNormal.exe` is in the PATH variable.\n\nSecondly it generates a normal map with a switch coordinate system and an AO map with fewer rays and jitter. Finally is generates a convexity map.\n\nFor a full list of options have a look in the source code where they are listed and easy to see.\n\nFinally it stores the errorcode of xNormal in case of something being wrong.\n\n```python \nimport xNormal\nxNormal.path = \"C:\\\\Program Files\\\\xNormal\\\\3.19.3\\\\x64\\\\xNormal.exe\"\nerr = xNormal.run(\"piano_high.obj\", \"piano_low.obj\", \"piano.png\", width = 256, height = 256, \n gen_normals = True, normals_x = \"+X\", normals_y = \"-Z\", normals_z = \"+Y\",\n gen_ao = True, ao_rays = 64, ao_jitter = True, \n gen_convexity = True, convexity_scale = 0.75)\n```\n\nExtended Usage 2\n----------------\n\nScripting xNormal goes via the form of supplying it with a configuration file. These can be generated and saved for later use.\n\nTo build a configuration file `xNormal.config` it must be supplied with a list of high mesh options, a list of low mesh options and a list of generation options.\n\n```python\nimport xNormal\nhigh_config = xNormal.high_mesh_options(\"piano_high.obj\", scale = 2.0)\nlow_config = xNormal.low_mesh_options(\"piano_low.obj\", scale = 2.0)\ngeneration_config = xNormal.generation_options(\"piano.png\", gen_normals = True)\n\nconfig = xNormal.config([high_config], [low_config], generation_config)\n\nf = open(\"later.xml\", 'w')\nf.write(config)\nf.close()\n```\n\n\n\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/orangeduck/Python-xNormal", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "xNormal", "package_url": "https://pypi.org/project/xNormal/", "platform": "", "project_url": "https://pypi.org/project/xNormal/", "project_urls": { "Homepage": "https://github.com/orangeduck/Python-xNormal" }, "release_url": "https://pypi.org/project/xNormal/1.1.0/", "requires_dist": null, "requires_python": "", "summary": "Wrapper for xNormal", "version": "1.1.0" }, "last_serial": 5625495, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "f384ab12402a45ebdc741eed918739e0", "sha256": "732bc981563f57f5445dd4ba7b2cd2a76895c59a65df708e99652e0421f7be56" }, "downloads": -1, "filename": "xNormal-1.0.win32.exe", "has_sig": false, "md5_digest": "f384ab12402a45ebdc741eed918739e0", "packagetype": "bdist_wininst", "python_version": "any", "requires_python": null, "size": 202241, "upload_time": "2012-05-13T13:30:19", "url": "https://files.pythonhosted.org/packages/fb/53/b10e67bbc1a68d7985d68e7f1662990209a417df0ed9e7134d7f1f93942b/xNormal-1.0.win32.exe" }, { "comment_text": "", "digests": { "md5": "453a130d6d82d118e0318d91da3cb566", "sha256": "9dc70a46499435dbbc425351d47237e50f4f11fcb84324132d69e0d36a384a4f" }, "downloads": -1, "filename": "xNormal-1.0.zip", "has_sig": false, "md5_digest": "453a130d6d82d118e0318d91da3cb566", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5991, "upload_time": "2012-05-13T13:30:16", "url": "https://files.pythonhosted.org/packages/6c/e9/b23b7a443a5a2a2808b3674d500449fa70e13687a787e497624e1c7b369d/xNormal-1.0.zip" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "370b462b7bf706e4f85a4cae431f312c", "sha256": "cdf34f7bcefcb351a8ec91fcdb649a519f78e739233c175a43eefe2449ef4251" }, "downloads": -1, "filename": "xNormal-1.0.1.zip", "has_sig": false, "md5_digest": "370b462b7bf706e4f85a4cae431f312c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5950, "upload_time": "2012-07-06T14:06:49", "url": "https://files.pythonhosted.org/packages/1d/98/92de7fd03fbe208eeb749edce2ffb7a8641845ba92e1942809af425f26b3/xNormal-1.0.1.zip" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "d9aa05dbe9c1bcf34381dd13125477c7", "sha256": "ae11ff0fb4afe28d5fe81da8cf0e04075f74ca94f295c9a3e5b34fd16df6a5c9" }, "downloads": -1, "filename": "xNormal-1.1.0-py3.5.egg", "has_sig": false, "md5_digest": "d9aa05dbe9c1bcf34381dd13125477c7", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 11399, "upload_time": "2019-08-02T18:12:37", "url": "https://files.pythonhosted.org/packages/f8/18/1d689f2055e9e879159770af01c1d209a21faa0dd2fe83babfecc9e8d2eb/xNormal-1.1.0-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "fb476af22a24c112fa0b4db054a8e73a", "sha256": "0561e8210941895286807aa521998b4929d0bd82dd50ff42afd671091793fb2b" }, "downloads": -1, "filename": "xNormal-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "fb476af22a24c112fa0b4db054a8e73a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 2812, "upload_time": "2019-08-02T18:12:36", "url": "https://files.pythonhosted.org/packages/80/16/861a251fcd3a76497c6d3ddfef0e15f79533afa635e42d867e85d32b07c6/xNormal-1.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "01c5f8b1e68b64183d2aa8bc030a9c6d", "sha256": "7df7ea4229c42eefcc4921a0a69d0a4b328db135bdf1476df8f84b643cb53cd2" }, "downloads": -1, "filename": "xNormal-1.1.0.tar.gz", "has_sig": false, "md5_digest": "01c5f8b1e68b64183d2aa8bc030a9c6d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1916, "upload_time": "2019-08-02T18:12:39", "url": "https://files.pythonhosted.org/packages/20/d4/5c0213d8e56d0e19bfb9395bf2eedc3336919175c1ca8a1a1c5c095929d6/xNormal-1.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d9aa05dbe9c1bcf34381dd13125477c7", "sha256": "ae11ff0fb4afe28d5fe81da8cf0e04075f74ca94f295c9a3e5b34fd16df6a5c9" }, "downloads": -1, "filename": "xNormal-1.1.0-py3.5.egg", "has_sig": false, "md5_digest": "d9aa05dbe9c1bcf34381dd13125477c7", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 11399, "upload_time": "2019-08-02T18:12:37", "url": "https://files.pythonhosted.org/packages/f8/18/1d689f2055e9e879159770af01c1d209a21faa0dd2fe83babfecc9e8d2eb/xNormal-1.1.0-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "fb476af22a24c112fa0b4db054a8e73a", "sha256": "0561e8210941895286807aa521998b4929d0bd82dd50ff42afd671091793fb2b" }, "downloads": -1, "filename": "xNormal-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "fb476af22a24c112fa0b4db054a8e73a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 2812, "upload_time": "2019-08-02T18:12:36", "url": "https://files.pythonhosted.org/packages/80/16/861a251fcd3a76497c6d3ddfef0e15f79533afa635e42d867e85d32b07c6/xNormal-1.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "01c5f8b1e68b64183d2aa8bc030a9c6d", "sha256": "7df7ea4229c42eefcc4921a0a69d0a4b328db135bdf1476df8f84b643cb53cd2" }, "downloads": -1, "filename": "xNormal-1.1.0.tar.gz", "has_sig": false, "md5_digest": "01c5f8b1e68b64183d2aa8bc030a9c6d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1916, "upload_time": "2019-08-02T18:12:39", "url": "https://files.pythonhosted.org/packages/20/d4/5c0213d8e56d0e19bfb9395bf2eedc3336919175c1ca8a1a1c5c095929d6/xNormal-1.1.0.tar.gz" } ] }