diff --git a/.gitignore b/.gitignore index 8b3a142d7..42006c990 100644 --- a/.gitignore +++ b/.gitignore @@ -15,7 +15,6 @@ slurm-*.out __pycache__ *.blend *.blend1 -*/worldgen/terrain/gen_occlusions/dependencies/* *.obj *.DS_Store **._.DS_Store diff --git a/.gitmodules b/.gitmodules index 06a89c419..2776bb127 100644 --- a/.gitmodules +++ b/.gitmodules @@ -2,32 +2,32 @@ path = infinigen/infinigen_gpl url = https://github.com/princeton-vl/infinigen_gpl.git [submodule "infinigen/datagen/custom_ground_truth/dependencies/eigen"] - path = infinigen/datagen/custom_ground_truth/dependencies/eigen + path = infinigen/datagen/customgt/dependencies/eigen url = https://gitlab.com/libeigen/eigen.git [submodule "infinigen/datagen/custom_ground_truth/dependencies/argparse"] - path = infinigen/datagen/custom_ground_truth/dependencies/argparse + path = infinigen/datagen/customgt/dependencies/argparse url = https://github.com/p-ranav/argparse.git [submodule "infinigen/datagen/custom_ground_truth/dependencies/cnpy"] - path = infinigen/datagen/custom_ground_truth/dependencies/cnpy + path = infinigen/datagen/customgt/dependencies/cnpy url = https://github.com/rogersce/cnpy.git [submodule "infinigen/datagen/custom_ground_truth/dependencies/indicators"] - path = infinigen/datagen/custom_ground_truth/dependencies/indicators + path = infinigen/datagen/customgt/dependencies/indicators url = https://github.com/p-ranav/indicators.git [submodule "infinigen/datagen/custom_ground_truth/dependencies/tinycolormap"] - path = infinigen/datagen/custom_ground_truth/dependencies/tinycolormap + path = infinigen/datagen/customgt/dependencies/tinycolormap url = https://github.com/yuki-koyama/tinycolormap.git [submodule "infinigen/datagen/custom_ground_truth/dependencies/glm"] - path = infinigen/datagen/custom_ground_truth/dependencies/glm + path = infinigen/datagen/customgt/dependencies/glm url = https://github.com/g-truc/glm.git [submodule "infinigen/datagen/custom_ground_truth/dependencies/fast_obj"] - path = infinigen/datagen/custom_ground_truth/dependencies/fast_obj + path = infinigen/datagen/customgt/dependencies/fast_obj url = https://github.com/thisistherk/fast_obj.git [submodule "infinigen/datagen/custom_ground_truth/dependencies/json"] - path = infinigen/datagen/custom_ground_truth/dependencies/json + path = infinigen/datagen/customgt/dependencies/json url = https://github.com/nlohmann/json.git [submodule "infinigen/datagen/custom_ground_truth/dependencies/stb"] - path = infinigen/datagen/custom_ground_truth/dependencies/stb + path = infinigen/datagen/customgt/dependencies/stb url = https://github.com/nothings/stb.git [submodule "infinigen/datagen/custom_ground_truth/dependencies/glfw"] - path = infinigen/datagen/custom_ground_truth/dependencies/glfw + path = infinigen/datagen/customgt/dependencies/glfw url = https://github.com/glfw/glfw.git diff --git a/Dockerfile b/Dockerfile index 7b460e293..866e58161 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,7 +32,7 @@ fi RUN mkdir /opt/infinigen WORKDIR /opt/infinigen COPY . . -RUN chmod +x worldgen/tools/install/compile_opengl.sh +RUN chmod +x infinigen/tools/install/compile_opengl.sh RUN conda init bash \ && . ~/.bashrc \ && conda create --name infinigen python=3.10 \ diff --git a/Makefile b/Makefile index 70ead5f4a..fa677b2f3 100644 --- a/Makefile +++ b/Makefile @@ -44,7 +44,7 @@ docker-run: -e "DISPLAY=$(DISPLAY)" \ -e "QT_X11_NO_MITSHM=1" \ -v "/tmp/.X11-unix:/tmp/.X11-unix:rw" \ - -v $(PWD)/worldgen/outputs:/opt/infinigen/worldgen/outputs \ + -v $(PWD)/outputs:/opt/infinigen/outputs \ -e "XAUTHORITY=$(XAUTH)" \ -e ROS_IP=127.0.0.1 \ --cap-add=SYS_PTRACE \ @@ -57,14 +57,14 @@ docker-run: -e "DISPLAY=$(DISPLAY)" \ -e "QT_X11_NO_MITSHM=1" \ -v "/tmp/.X11-unix:/tmp/.X11-unix:rw" \ - -v $(PWD)/worldgen/outputs:/opt/infinigen/worldgen/outputs \ + -v $(PWD)/outputs:/opt/infinigen/outputs \ -e "XAUTHORITY=$(XAUTH)" \ -e ROS_IP=127.0.0.1 \ --cap-add=SYS_PTRACE \ -v /etc/group:/etc/group:ro \ "$(DOCKER_TAG)" bash - docker exec infinigen /bin/bash -c worldgen/tools/install/compile_opengl.sh + docker exec infinigen /bin/bash -c infinigen/tools/install/compile_opengl.sh docker-run-no-opengl: echo "Launching Docker image without OpenGL ground truth" @@ -73,7 +73,7 @@ docker-run-no-opengl: --gpus=all \ --env NVIDIA_DISABLE_REQUIRE=1 \ -e "BLENDER=/opt/infinigen/blender/blender" \ - -v $(PWD)/worldgen/outputs:/opt/infinigen/worldgen/outputs \ + -v $(PWD)/outputs:/opt/infinigen/outputs \ "$(DOCKER_TAG)" /bin/bash docker-run-no-gpu: @@ -84,20 +84,20 @@ docker-run-no-gpu: -e "DISPLAY=$(DISPLAY)" \ -e "QT_X11_NO_MITSHM=1" \ -v "/tmp/.X11-unix:/tmp/.X11-unix:rw" \ - -v $(PWD)/worldgen/outputs:/opt/infinigen/worldgen/outputs \ + -v $(PWD)/outputs:/opt/infinigen/outputs \ -e "XAUTHORITY=$(XAUTH)" \ -e ROS_IP=127.0.0.1 \ --cap-add=SYS_PTRACE \ -v /etc/group:/etc/group:ro \ "$(DOCKER_TAG)" /bin/bash \ - docker exec infinigen /bin/bash -c worldgen/tools/install/compile_opengl.sh + docker exec infinigen /bin/bash -c infinigen/tools/install/compile_opengl.sh docker-run-no-gpu-opengl: echo "Launching Docker image without GPU passthrough or OpenGL" docker run -td --rm --privileged --net=host --ipc=host \ --name="infinigen" \ -e "BLENDER=/opt/infinigen/blender/blender" \ - -v $(PWD)/worldgen/outputs:/opt/infinigen/worldgen/outputs \ + -v $(PWD)/outputs:/opt/infinigen/outputs \ "$(DOCKER_TAG)" /bin/bash \ No newline at end of file diff --git a/README.md b/README.md index b2116d05d..3e5d6df35 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ Please see our [project roadmap](https://infinigen.org/roadmap) and follow us at ### Contributing We welcome contributions! You can contribute in many ways: - **Contribute code to this repository** - We welcome code contributions. More guidelines coming soon. -- **Contribute procedural generators** - `worldgen/nodes/node_transpiler/dev_script.py` provides tools to convert artist-friendly [Blender Nodes](https://docs.blender.org/manual/en/2.79/render/blender_render/materials/nodes/introduction.html) into python code. Tutorials and guidelines coming soon. +- **Contribute procedural generators** - `infinigen/nodes/node_transpiler/dev_script.py` provides tools to convert artist-friendly [Blender Nodes](https://docs.blender.org/manual/en/2.79/render/blender_render/materials/nodes/introduction.html) into python code. Tutorials and guidelines coming soon. - **Contribute pre-generated data** - Anyone can contribute their computing power to create data and share it with the community. Please stay tuned for a repository of pre-generated data. ### Getting Help @@ -63,7 +63,7 @@ Please post this repository's Github Issues page for help. Please run your comma - What version of the code are you using (link a commit hash), and what if any modifications have you made (new configs, code edits) - What exact command did you run? - What were the output logs of the command you ran? - - If using `manage_datagen_jobs`, look in `outputs/MYJOB/MYSEED/logs/` to find the right one. + - If using `manage_jobs`, look in `outputs/MYJOB/MYSEED/logs/` to find the right one. - What was the exact python error and stacktrace, if applicable? ### Acknowledgements diff --git a/docs/ConfiguringInfinigen.md b/docs/ConfiguringInfinigen.md index e4bdc58a5..5563b380c 100644 --- a/docs/ConfiguringInfinigen.md +++ b/docs/ConfiguringInfinigen.md @@ -10,11 +10,11 @@ Generating scenes with Infinigen typically involves two main python scripts: 1. [examples/generate_nature.py](../examples/generate_nature.py) - our example scene composition script, which invokes and places assets to create a realistic nature scene. 1. [manage_jobs.py](../infinigen/datagen/manage_jobs.py) - a script which invokes the above scene composition script many times to generate a useful dataset. -`manage_datagen_jobs.py` controls how many and what jobs will be run, and `generate.py` determines what will happen during those jobs. Ultimately both programs must be configured correctly in order to make useful data. +`manage_jobs.py` controls how many and what jobs will be run, and `examples/generate_nature.py` determines what will happen during those jobs. Ultimately both programs must be configured correctly in order to make useful data. ### Scene tasks -To complete one Infinigen scene, `manage_datagen_jobs.py` will run several "tasks", each composed of a single execution of `generate.py`(You ran similar processes yourself in the step by step part of "Hello World"). +To complete one Infinigen scene, `manage_jobs.py` will run several "tasks", each composed of a single execution of `examples/generate_nature.py`(You ran similar processes yourself in the step by step part of "Hello World"). Typically, these tasks are as follows: 1. `coarse`, which generates coarse terrain shape, puts placeholders for creatures and large trees / obstacles, and generates all small assets (twigs, particles, etc) that will be "instanced", IE scattered across the terrain with repetition. @@ -31,15 +31,15 @@ Infinigen is designed to run many independent scenes in paralell. This means tha #### Overrides and Config Files -Both `manage_datagen_jobs.py` and `generate.py` can be configured via the commandline or config files, using [Google's "Gin Config"](https://github.com/google/gin-config). Gin allows you to insert new default keyword arguments ("kwargs") for any function decorated with `@gin.configurable`; many such functions exist in our codebase, and via gin overrides you can create datsets suiting many diverse applications, as is explained in the coming sections. +Both `manage_jobs.py` and `examples/generate_nature.py` can be configured via the commandline or config files, using [Google's "Gin Config"](https://github.com/google/gin-config). Gin allows you to insert new default keyword arguments ("kwargs") for any function decorated with `@gin.configurable`; many such functions exist in our codebase, and via gin overrides you can create datsets suiting many diverse applications, as is explained in the coming sections. -To use gin, simply add commandline arguments such as `-p compose_scene.rain_particles_chance = 1.0` to override the chance of rain, or `--pipeline_overrides iterate_scene_tasks.frame_range=[1,25]` to set a video's length to 24 frames. You can chain many statements together, separated by spaces, to configure many parts of the system at once. These statements depend on knowing the python names of the function and keyword argument you wish to override. To find parameters you wish to override, you should browse `worldgen/config/base.gin` and other configs, or `generate.py` and the definitions of any functions it calls. Better documentation and organization of the available parameters will come in future versions. +To use gin, simply add commandline arguments such as `-p compose_scene.rain_particles_chance = 1.0` to override the chance of rain, or `--pipeline_overrides iterate_scene_tasks.frame_range=[1,25]` to set a video's length to 24 frames. You can chain many statements together, separated by spaces, to configure many parts of the system at once. These statements depend on knowing the python names of the function and keyword argument you wish to override. To find parameters you wish to override, you should browse `examples/configs/base.gin` and other configs, or `examples/generate_nature.py` and the definitions of any functions it calls. Better documentation and organization of the available parameters will come in future versions. -If you find a useful and related combination of these commandline overrides, you can write them into a `.gin` file in `worldgen/configs`. Then, to load that config, just include the name of the file into the `--configs`. If your overrides target `manage_datagen_jobs` rather than `generate.py` you should place the config file in `worldgen/tools/pipeline_configs` and use `--pipeline_configs` rather than `--configs`. +If you find a useful and related combination of these commandline overrides, you can write them into a `.gin` file in `examples/configs`. Then, to load that config, just include the name of the file into the `--configs`. If your overrides target `manage_jobs` rather than `examples/generate_nature.py` you should place the config file in `datagen/configs` and use `--pipeline_configs` rather than `--configs`. -Our `generate.py` driver always loads [`worldgen/configs/base.gin`][../worldgen/configs/base.gin], and you can inspect / modify this file to see many common and useful gin override options. +Our `examples/generate_nature.py` driver always loads [`examples/configs/base.gin`][../examples/configs/base.gin], and you can inspect / modify this file to see many common and useful gin override options. -`generate.py` also expects that one file from (configs/scene_types/)[worldgen/config/scene_types] will be loaded. These scene_type configs contain gin overrides designed to encode the semantic constraints of real natural habitats (e.g. `worldgen/scene_types/desert.gin` causes sand to appear and cacti to be more likely). +`examples/generate_nature.py` also expects that one file from (configs/scene_types/)[examples/configs/scene_types] will be loaded. These scene_type configs contain gin overrides designed to encode the semantic constraints of real natural habitats (e.g. `examples/configs/scene_types/desert.gin` causes sand to appear and cacti to be more likely). ### Moving beyond "Hello World" @@ -57,8 +57,8 @@ Here is a breakdown of what every commandline argument does, and ideas for how y - `--specific_seed 0` forces the system to use a random seed of your choice, rather than choosing one at random. Change this seed to get a different random variation, or remove it to have the program choose a seed at random - `--num_scenes` decides how many unique scenes the program will attempt to generate before terminating. Once you have removed `--specific_seed`, you can increase this to generate many scenes in sequence or in paralell. - `--configs desert.gin simple.gin` forces the command to generate a desert scene, and to do so with relatively low mesh detail, low render resolution, low render samples, and some asset types disabled. - - Do `--configs snowy_mountain.gin simple.gin` to try out a different scene type (`snowy_mountain.gin` can instead be any scene_type option from `worldgen/configs/scene_types/`) - - Remove the `desert.gin` and just specify `--configs simple.gin` to use random scene types according to the weighted list in `worldgen/tools/pipeline_configs/base.gin`. + - Do `--configs snowy_mountain.gin simple.gin` to try out a different scene type (`snowy_mountain.gin` can instead be any scene_type option from `examples/configs/scene_types/`) + - Remove the `desert.gin` and just specify `--configs simple.gin` to use random scene types according to the weighted list in `datagen/configs/base.gin`. - You have the option of removing `simple.gin` and specify neither of the original configs. This turns off the many detail-reduction options included in `simple.gin`, and will create scenes closer to those in our intro video, albeit at significant compute costs. Removing `simple.gin` will likely cause crashes unless using a workstation/server with large amounts of RAM and VRAM. You can find more details on optimizing scene content for performance [here](#config-overrides-for-mesh-detail-and-performance). - `--pipeline_configs local_16GB.gin monocular.gin blender_gt.gin` - `local_16GB.gin` specifies to run only a single scene at a time, and to run each task as a local python process. See [here](#configuring-available-computing-resources) for more options @@ -74,11 +74,11 @@ This section highlights commandline options to help you deploy Infinigen on your ### Configuring available computing resources -`worldgen/tools/pipeline_configs/compute_platform` provides several preset configs to help you run the appropriate number and type of Infinigen tasks suitable to your hardware.
These configs are mutually exclusive, but you must include at least one.
+`datagen/configs/compute_platform` provides several preset configs to help you run the appropriate number and type of Infinigen tasks suitable to your hardware.
These configs are mutually exclusive, but you must include at least one.
-`local_16GB.gin` through `local_256GB.gin` are intended for laptops, desktop workstations, or a single headless node. These configs run each task as a child process on the same machine that ran `manage_datagen_jobs.py`. Each config runs the right number of concurrent jobs for the specified amount of RAM. If you have a different amount of RAM than the options provided, you should override `manage_datagen_jobs.num_concurrent`to your amount of system RAM divided by 20GB. Ultimately, the amount of concurrent process you can run will depend on the format (single-image vs. video) and complexity (detail, clutter, etc) of the scenes you wish to generate - see [here](#config-overrides-for-mesh-detail-and-performance) to customize. +`local_16GB.gin` through `local_256GB.gin` are intended for laptops, desktop workstations, or a single headless node. These configs run each task as a child process on the same machine that ran `manage_jobs.py`. Each config runs the right number of concurrent jobs for the specified amount of RAM. If you have a different amount of RAM than the options provided, you should override `manage_jobs.num_concurrent`to your amount of system RAM divided by 20GB. Ultimately, the amount of concurrent process you can run will depend on the format (single-image vs. video) and complexity (detail, clutter, etc) of the scenes you wish to generate - see [here](#config-overrides-for-mesh-detail-and-performance) to customize. -`slurm.gin` is a special config designed to deploy Infinigen onto SLURM computing clusters. When using this config, each task will be executed as a remote slurm job (using [submitit](https://github.com/facebookincubator/submitit)), with time-limit/CPU/RAM requests set as specified in `slurm.gin`. If your group has a SLURM partition name, please set `PARTITION = "mygroupname"` in `slurm.gin`. If you are able to run very long SLURM jobs (>= ~3 days) you may also consider submitting `manage_datagen_jobs` with `local_256GB.gin` as a single long slurm job. +`slurm.gin` is a special config designed to deploy Infinigen onto SLURM computing clusters. When using this config, each task will be executed as a remote slurm job (using [submitit](https://github.com/facebookincubator/submitit)), with time-limit/CPU/RAM requests set as specified in `slurm.gin`. If your group has a SLURM partition name, please set `PARTITION = "mygroupname"` in `slurm.gin`. If you are able to run very long SLURM jobs (>= ~3 days) you may also consider submitting `manage_jobs` with `local_256GB.gin` as a single long slurm job. Please submit a Github Issue for help with deploying Infinigen on your compute. @@ -101,31 +101,31 @@ If you have more than one GPU and are using a `local_*.gin` compute config, each ### Rendering Video, Stereo and other data formats -Generating a video, stereo or other dataset typically requires more render jobs, so we must instruct `manage_datagen_jobs.py` to run those jobs. `worldgen/tools/pipeline_configs/data_schema/` provides many options for you to use in your `--pipeline_configs`, including `monocular_video.gin` and `stereo.gin`.
These configs are typically mutually exclusive, and you must include at least one
+Generating a video, stereo or other dataset typically requires more render jobs, so we must instruct `manage_jobs.py` to run those jobs. `datagen/configs/data_schema/` provides many options for you to use in your `--pipeline_configs`, including `monocular_video.gin` and `stereo.gin`.
These configs are typically mutually exclusive, and you must include at least one
:exclamation: Our terrain system resolves its signed distance function (SDF) to view-specific meshes, which must be updated as the camera moves. For video rendering, we strongly recommend using the `high_quality_terrain` config to avoid perceptible flickering and temporal aliasing. This config meshes the SDF at very high detail, to create seamless video. However, it has high compute costs, so we recommend also using `--pipeline_config cuda_terrain` on a machine with an NVIDIA GPU. For applications with fast moving cameras, you may need to update the terrain mesh more frequently by decreasing `iterate_scene_tasks.view_block_size = 16`. To create longer videos, modify `iterate_scene_tasks.frame_range` in `monocular_video.gin` (note: we use 24fps video by default). `iterate_scene_tasks.view_block_size` controls how many frames will be grouped into each `fine_terrain` and render / ground-truth task. -If you need more than two cameras, or want to customize their placement, see `worldgen/config/base.gin`'s `camera.spawn_camera_rigs.camera_rig_config` for advice on existing options, or write your own code to instantiate a custom camera setup. +If you need more than two cameras, or want to customize their placement, see `examples/configs/base.gin`'s `camera.spawn_camera_rigs.camera_rig_config` for advice on existing options, or write your own code to instantiate a custom camera setup. ### Config Overrides to Customize Scene Content :bulb: If you only care about few specific assets, or want to export Infinigen assets to another project, instead see [Generating individual assets](GeneratingIndividualAssets.md). -You can achieve a great deal of customization by browsing and editing `worldgen/config/base.gin` - e.g. modifying cameras, lighting, asset placement, etc. +You can achieve a great deal of customization by browsing and editing `examples/configs/base.gin` - e.g. modifying cameras, lighting, asset placement, etc. - `base.gin` only provides the default values of these configs, and may be overridden by scene_type configs. To apply a setting globally across all scene types, you should put them in a new config placed at the end of your `--configs` argument (so that it's overrides are applied last), or use commandline overrides. -However, many options exist which are not present in base.gin. At present, you must browse `generate.py` to find the part of the code you wish to customize, and look through the relevant code for what more advanced @gin.configurable functions are available. You can also add @gin.configurable to most functions to allow additional configuration. More documentation on available parameters is coming soon. +However, many options exist which are not present in base.gin. At present, you must browse `examples/generate_nature.py` to find the part of the code you wish to customize, and look through the relevant code for what more advanced @gin.configurable functions are available. You can also add @gin.configurable to most functions to allow additional configuration. More documentation on available parameters is coming soon. -For most steps of `generate.py`'s `compose_scene` function, we use our `RandomStageExecutor` wrapper to decide whether the stage is run, and handle other bookkeeping. This means that if you want to decide the probability with which some asset is included in a scene, you can use the gin override `compose_scene.trees_chance=1.0` or something similar depending on the name string provided as the first argument of the relevant run_stage calls in this way, e.g. `compose_scene.rain_particles_chance=0.9`to make most scenes rainy, or `compose_scene.flowers_chance=0.1` to make flowers rarer. +For most steps of `examples/generate_nature.py`'s `compose_scene` function, we use our `RandomStageExecutor` wrapper to decide whether the stage is run, and handle other bookkeeping. This means that if you want to decide the probability with which some asset is included in a scene, you can use the gin override `compose_scene.trees_chance=1.0` or something similar depending on the name string provided as the first argument of the relevant run_stage calls in this way, e.g. `compose_scene.rain_particles_chance=0.9`to make most scenes rainy, or `compose_scene.flowers_chance=0.1` to make flowers rarer. -A common request is to just turn off things you don't want to see, which can be achieved by adding `compose_scene.trees_chance=0.0` or similar to your `-p` argument or a loaded config file. To conveniently turn off lots of things at the same time, we provide configs in `worldgen/configs/disable_assets` to disable things like all creatures, or all particles. +A common request is to just turn off things you don't want to see, which can be achieved by adding `compose_scene.trees_chance=0.0` or similar to your `-p` argument or a loaded config file. To conveniently turn off lots of things at the same time, we provide configs in `examples/configs/disable_assets` to disable things like all creatures, or all particles. -You will also encounter configs using what we term a "registry pattern", e.g. `worldgen/config/base_surface_registry.gin`'s `ground_collection`. "Registries", in this project, are a list of discrete generators, with weights indicating how relatively likely they are to be chosen each time the registry is sampled. +You will also encounter configs using what we term a "registry pattern", e.g. `examples/configs/base_surface_registry.gin`'s `ground_collection`. "Registries", in this project, are a list of discrete generators, with weights indicating how relatively likely they are to be chosen each time the registry is sampled. - For example, in `base_surface_registry.gin`, `surface.registry.beach` specifies `("sand", 10)` to indicate that sand has high weight to be chosen to be assigned for the beach category. - Weights are normalized by their overall sum to obtain a probability distribution. - - Name strings undergo lookup in the relevant source code folders, e.g. the name "sand" in a surface registry maps to `worldgen/surfaces/templates/sand.py`. + - Name strings undergo lookup in the relevant source code folders, e.g. the name "sand" in a surface registry maps to `infinigen/assets/materials/sand.py`. ### Config Overrides for mesh detail and performance @@ -143,7 +143,7 @@ Infinigen curbs memory costs by only populating assets up to a certain distance - Similarly to the above, `compose_scene.near_distance` controls the maximum distance to scatter tiny particles like pine needles. - Infinigen does not populate assets which are far outside the camera frustrum. You may attempt to reduce camera FOV to minimize how many assets are in view, but be warned there will be minimal or significantly diminishing returns on performance, due to the need to keep out-of-view assets loaded to retain accurate lighting/shadows. -We also provide `worldgen/configs/performance/dev.gin`, a config which sets many of the above performance parameters to achieve lower scenes. We often use this config to obtain previews for development purposes, but it may also be suitable for generating lower resolution images/scenes for some tasks. +We also provide `examples/configs/performance/dev.gin`, a config which sets many of the above performance parameters to achieve lower scenes. We often use this config to obtain previews for development purposes, but it may also be suitable for generating lower resolution images/scenes for some tasks. Our current system determines asset mesh resolution based on the _closest distance_ it comes to the camera during an entire trajectory. Therefore, longer videos are more expensive, as more assets will be closer to the camera at some point in the trajectory. Options exist to re-generate assets at new resolutions over the course of a video to curb these costs - please make a Github Issue for advice. @@ -152,9 +152,9 @@ If you find yourself bottlenecked by GPU time, you should consider the following - Reduce `base.gin`'s `full/render_image.num_samples = 8192` or `compose_scene.generate_resolution = (1920, 1080)`. This proportionally reduces rendering FLOPS, with some diminishing returns due to BVH setup time. - If your GPU(s) are _underutilized_, try the reverse of these tips. -Some scene type configs are also generally more expensive than others. `forest.gin` and `coral.gin` are very expensive due to dense detailed fauna, wheras `artic` and `snowy_mountain` are very cheap. Low-resource compute settings (<64GB) of RAM may only be able to handle a subset of our `worldgen/config/scene_type/` options, and you may wish to tune the ratios of scene_types by editing `worldgen/tools/pipeline_configs/base.gin` or otherwise overriding `sample_scene_spec.config_distribution`. +Some scene type configs are also generally more expensive than others. `forest.gin` and `coral.gin` are very expensive due to dense detailed fauna, wheras `artic` and `snowy_mountain` are very cheap. Low-resource compute settings (<64GB) of RAM may only be able to handle a subset of our `examples/configs/scene_type/` options, and you may wish to tune the ratios of scene_types by editing `datagen/configs/base.gin` or otherwise overriding `sample_scene_spec.config_distribution`. -### Other `manage_datagen_jobs.py` commandline options +### Other `manage_jobs.py` commandline options Please run `pythom -m infinigen.datagen.manage_jobs --help` for an up-to-date description of other commandline arguments. We always use `--cleanup big_files --warmup_sec 30000` for large render jobs. Optionally, you can also log render progress to Weights & Biases. @@ -204,7 +204,7 @@ python -m infinigen.datagen.manage_jobs --output_folder outputs/my_videos --num_ --overrides compose_scene.rain_particles_chance=1.0 ``` -:bulb: You can substitute the `rain_particles` in `rain_particles_chance` for any `run_stage` name argument string in `worldgen/generate.py`, such as `trees` or `ground_creatures`. +:bulb: You can substitute the `rain_particles` in `rain_particles_chance` for any `run_stage` name argument string in `examples/generate_nature.py`, such as `trees` or `ground_creatures`. Create images that only have terrain: ``` @@ -212,7 +212,7 @@ python -m infinigen.datagen.manage_jobs --output_folder outputs/my_videos --num_ --pipeline_config slurm monocular cuda_terrain opengl_gt \ --cleanup big_files --warmup_sec 30000 --config no_assets ``` -:bulb: You can substitute "no_assets" for `no_creatures` or `no_particles`, or the name of any file under `worldgen/config`. The command shown uses `worldgen/config/disable_assets/no_assets.gin`. +:bulb: You can substitute "no_assets" for `no_creatures` or `no_particles`, or the name of any file under `examples/configs`. The command shown uses `examples/configs/disable_assets/no_assets.gin`. Create videos at birds-eye-view camera altitudes: @@ -223,7 +223,7 @@ python -m infinigen.datagen.manage_jobs --output_folder outputs/my_videos --num_ --overrides camera.camera_pose_proposal.altitude=["uniform", 20, 30] ``` -:bulb: The command shown is overriding `worldgen/config/base.gin`'s default setting of `camera.camera_pose_proposal.altitude`. You can use a similar syntax to override any number of .gin config entries. Separate multiple entries with spaces. +:bulb: The command shown is overriding `examples/configs/base.gin`'s default setting of `camera.camera_pose_proposal.altitude`. You can use a similar syntax to override any number of .gin config entries. Separate multiple entries with spaces. Create 1 second video clips: ``` @@ -233,4 +233,4 @@ python -m infinigen.datagen.manage_jobs --output_folder outputs/my_videos --num_ --pipeline_overrides iterate_scene_tasks.frame_range=[1,25] ``` -:bulb: This command uses `--pipeline_overrides` rather than `--overrides` since it is providing a gin override to the `manage_datagen_jobs.py` process, not some part of the main `generate.py` driver. +:bulb: This command uses `--pipeline_overrides` rather than `--overrides` since it is providing a gin override to the `manage_jobs.py` process, not some part of the main `examples/generate_nature.py` driver. diff --git a/docs/GeneratingFluidSimulations.md b/docs/GeneratingFluidSimulations.md index 1c62e2f47..883a84ba1 100644 --- a/docs/GeneratingFluidSimulations.md +++ b/docs/GeneratingFluidSimulations.md @@ -4,7 +4,7 @@ This documentation details how to generate fire and water simulations like those ## Setup -To generate fluids, you run install.sh with the optional FLIP-Fluids setup step (`bash install.sh flip_fluids`), or, please run `bash worldgen/tools/install/compile_flip_fluids.sh` to install flip fluids now. +To generate fluids, you run install.sh with the optional FLIP-Fluids setup step (`bash install.sh flip_fluids`), or, please run `bash infinigen/tools/install/compile_flip_fluids.sh` to install flip fluids now. ## Example Commands diff --git a/docs/GeneratingIndividualAssets.md b/docs/GeneratingIndividualAssets.md index bfd43b93f..5d6b0f3b4 100644 --- a/docs/GeneratingIndividualAssets.md +++ b/docs/GeneratingIndividualAssets.md @@ -11,7 +11,6 @@ Limitations (to be addressed soon): Shown are three examples of using our `generate_individual_assets.py` script to create images and .blend files. ```bash -cd worldgen mkdir outputs python tools/generate_individual_assets.py -- -f CoralFactory -n 8 --save_blend python tools/generate_individual_assets.py -- -f seashells -n 1 --save_blend @@ -30,9 +29,9 @@ Please run `python tools/generate_individual_assets.py -- --help` for a full lis The most commonly used arguments are: - `-f` to specify the name(s) of assets or materials to generate. `-f NAME` can specify to generate three different types of objects: - - If `NAME` is the name of a class defined in `worldgen/assets`, then it will be treated as an AssetFactory and used to generate objects from scratch. For example, you can say `-f CactusFactory` or `-f CarnivoreFactory`, or use the name of any similar Factory class in the codebase. - - If `NAME` is the name of a file in `worldgen/surfaces/templates`, that material will be applied onto a sphere - - If `NAME` is the name of a file in `worldgen/surfaces/scatters`, that scatter generator will be applied nto a plane + - If `NAME` is the name of a class defined in `infinigen/assets`, then it will be treated as an AssetFactory and used to generate objects from scratch. For example, you can say `-f CactusFactory` or `-f CarnivoreFactory`, or use the name of any similar Factory class in the codebase. + - If `NAME` is the name of a file in `infinigen/assets/materials`, that material will be applied onto a sphere + - If `NAME` is the name of a file in `infinigen/assets/scatters`, that scatter generator will be applied nto a plane - `-n` adjusts the number of images / blend files to be generated. diff --git a/docs/GroundTruthAnnotations.md b/docs/GroundTruthAnnotations.md index 2837c4ad4..4131d45be 100644 --- a/docs/GroundTruthAnnotations.md +++ b/docs/GroundTruthAnnotations.md @@ -16,7 +16,7 @@ Infinigen can produce some dense annotations using Blender's built-in render passes. Users may prefer to use these annotations over our extended annotation system's since it requires only the bare-minimum installation. It is also able to run without a GPU. -These annotations are produced when using the `--pipeline_configs blender_gt` ground truth extraction config in [manage_datagen_jobs.py](/README.md#generate-images-in-one-command), or can be done manually as shown in the final step of the [Hello-World](/README.md#generate-a-scene-step-by-step) example. +These annotations are produced when using the `--pipeline_configs blender_gt` ground truth extraction config in [manage_jobs.py](/README.md#generate-images-in-one-command), or can be done manually as shown in the final step of the [Hello-World](/README.md#generate-a-scene-step-by-step) example. ## Advanced Annotation Pipeline :large_blue_diamond: @@ -61,7 +61,7 @@ bash install.sh opengl ``` Or, if you have already run `install.sh` earlier, you can just run ``` -bash worldgen/tools/install/compile_opengl.sh +bash infinigen/tools/install/compile_opengl.sh ``` ### Extended Hello-World @@ -70,11 +70,11 @@ Continuing the [Hello-World](/README.md#generate-a-scene-step-by-step) example, 4. Export the geometry from blender to disk ``` -$python generate.py -- --seed 0 --task mesh_save -g desert simple --input_folder outputs/helloworld/fine --output_folder outputs/helloworld/saved_mesh +python examples/generate_nature.py -- --seed 0 --task mesh_save -g desert simple --input_folder outputs/helloworld/fine --output_folder outputs/helloworld/saved_mesh ``` 5. Generate dense annotations ``` -../process_mesh/build/process_mesh --frame 1 -in outputs/helloworld/saved_mesh -out outputs/helloworld/frames +infinigen/datagen/customgt/build/customgt --frame 1 -in outputs/helloworld/saved_mesh -out outputs/helloworld/frames ``` 6. Summarize the file structure into a single JSON ``` diff --git a/docs/HelloWorld.md b/docs/HelloWorld.md index 354aff9b8..978f0410f 100644 --- a/docs/HelloWorld.md +++ b/docs/HelloWorld.md @@ -17,27 +17,26 @@ Infinigen generates scenes by running multiple tasks (usually executed automatic :exclamation: If you encounter any missing .so files, missing dependencies (such as `gin`), or similar crashes, please check again that all steps of installation ran successfully. If you cannot resolve any issues with installation, please see our README and 'Bug Report' Git Issue template for advice on posting Git Issues to get help quickly - you must include the full installation logs in your issue so that we can help debug. ``` -cd worldgen mkdir outputs # Generate a scene layout -python generate.py -- --seed 0 --task coarse -g desert.gin simple.gin --output_folder outputs/helloworld/coarse +python examples/generate_nature.py -- --seed 0 --task coarse -g desert.gin simple.gin --output_folder outputs/helloworld/coarse # Populate unique assets -python generate.py -- --seed 0 --task populate fine_terrain -g desert.gin simple.gin --input_folder outputs/helloworld/coarse --output_folder outputs/helloworld/fine +python examples/generate_nature.py -- --seed 0 --task populate fine_terrain -g desert.gin simple.gin --input_folder outputs/helloworld/coarse --output_folder outputs/helloworld/fine # Render RGB images -python generate.py -- --seed 0 --task render -g desert.gin simple.gin --input_folder outputs/helloworld/fine --output_folder outputs/helloworld/frames +python examples/generate_nature.py -- --seed 0 --task render -g desert.gin simple.gin --input_folder outputs/helloworld/fine --output_folder outputs/helloworld/frames # Render again for accurate ground-truth -python generate.py -- --seed 0 --task render -g desert.gin simple.gin --input_folder outputs/helloworld/fine --output_folder outputs/helloworld/frames -p render.render_image_func=@flat/render_image +python examples/generate_nature.py -- --seed 0 --task render -g desert.gin simple.gin --input_folder outputs/helloworld/fine --output_folder outputs/helloworld/frames -p render.render_image_func=@flat/render_image ``` Output logs should indicate what the code is working on. Use `--debug` for even more detail. After each command completes you can inspect it's `--output_folder` for results, including running `$BLENDER outputs/helloworld/coarse/scene.blend` or similar to view blender files. We hide many meshes by default for viewport stability; to view them, click "Render" or use the UI to unhide them. ## Generate image(s) in one command -We provide `tools/manage_datagen_jobs.py`, a utility which runs similar steps automatically. +We provide `tools/manage_jobs.py`, a utility which runs similar steps automatically. ``` python -m infinigen.datagen.manage_jobs --output_folder outputs/hello_world --num_scenes 1 --specific_seed 0 \ diff --git a/docs/ImplementingAssets.md b/docs/ImplementingAssets.md index b2d9a4710..348e11bb8 100644 --- a/docs/ImplementingAssets.md +++ b/docs/ImplementingAssets.md @@ -10,7 +10,7 @@ The workflow described in this guide requires some knowledge of python *and* the - You may have success trying out this guide anyway. If you can navigate the Blender UI (either by trial and error, or via the many great [online resources](https://www.youtube.com/watch?v=nIoXOplUvAw&t=34s)), this tutorial will help you use Blender as a powerful visual debugging tool to repeatedly test code you write in your usual IDE. - Ultimately you can work on Infinigen by only manipulating code/text files. The best approach to get started on this at present is to read the many existing python files in the repo. We will work on better documentation and APIs for python developers. -This guide does not cover how to add new elements to the terrain marching cubes mesh. This guide also does not cover adding different lighting, although you can use a similar nodegraph workflow as explained below to customize the existing lighting assets in the repo, such as the [sky light](../worldgen/lighting/lighting.py) or [caustics lamps](../worldgen/assets/caustics_lamp.py). +This guide does not cover how to add new elements to the terrain marching cubes mesh. This guide also does not cover adding different lighting, although you can use a similar node-based workflow to modify [the already existing lighting assets](infinigen/assets/lighting) in the repo. ## Setting up the Blender UI for interactive development @@ -18,7 +18,6 @@ Unless you intend to work solely on python/other code (and don't intend to inter To open the Blender UI, run the following in a terminal: ```bash -cd infinigen/worldgen $BLENDER dev_scene.blend ``` :warning: You must use $BLENDER, which refers to the blender installation located in infinigen/blender, as it has additional dependencies installed. Using another blender installation is fine to open or inspect files, but it will not be able to run any of Infinigen's code or tools. @@ -40,7 +39,7 @@ You do not have to use this UI configuration all the time, but the following ste ## Importing Infinigen's dependencies into the Blender UI -Finally, to import Infinigen into your Blender UI, click the 'Open' button on your `Text Editor` panel, then navigate to and open `worldgen/tools/blendscript_import_infinigen.py`. Click the play button to execute the script. +Finally, to import Infinigen into your Blender UI, click the 'Open' button on your `Text Editor` panel, then navigate to and open `infinigen/tools/blendscript_import_infinigen.py`. Click the play button to execute the script. :warning: You will need to re-run this script every time you restart Blender. @@ -49,12 +48,18 @@ Finally, to import Infinigen into your Blender UI, click the 'Open' button on yo Now that you have imported Infinigen into Blender, you can easily access all its assets and materials via the commandline. To start, we recommend using Infinigen's sky lighting while you make your asset, so you can get a better sense of what the asset will look like in full scenes. To sample a random sky lighting, run the following two steps in your Blender console: +<<<<<<< HEAD ```python from lighting import lighting lighting.add_lighting() +======= +``` +from infingen.assets.lighting import sky_lighting +sky_lighting.add_lighting() +>>>>>>> 5e32cd3eb (Fix all imports and paths) ``` -You can use this mechanism to access any asset or python file under the `worldgen/` folder. For example run `from surfaces.scatters import grass` then `grass.apply(bpy.context.active_object)` in the Python Console window to apply our grassland scatter generator directly onto whichever object is selected & highlighted orange in your UI. The first statement imports the python script shown in `worldgen/surfaces/scatters/grass.py`, and you can use a similar statement to test out any python file under the worldgen/ folder, by replacing `surfaces.scatters` and `grass` with the relevant subfolder names and python filename. +You can use this mechanism to access any asset or python file under the `infinigen/` folder. For example run `from infinigen.assets.scatters import grass` then `grass.apply(bpy.context.active_object)` in the Python Console window to apply our grassland scatter generator directly onto whichever object is selected & highlighted orange in your UI. The first statement imports the python script shown in `infinigen/assets/scatters/grass.py`. You can use a similar statement to test out any python file under the infinigen/ folder, by replacing `surfaces.scatters` and `grass` with the relevant subfolder names and python filename. ![White cube with procedural grass covering it](images/implementing_assets/setting_up_blender_ui_grassdemo.png) @@ -64,7 +69,7 @@ The Geometry Node and Shader Node windows in this screenshot show nodegraphs gen ## Implementing a new material or surface scatter -To add a material to Infinigen, we must create a python file similar to those in `worldgen/surfaces/templates`. You are free to write such a file by hand in python using our `NodeWrangler` utility, but we recommend instead implementing your material in Blender then using our Node Transpiler to convert it to python code. +To add a material to Infinigen, we must create a python file similar to those in `infinigen/assets/materials`. You are free to write such a file by hand in python using our `NodeWrangler` utility, but we recommend instead implementing your material in Blender then using our Node Transpiler to convert it to python code. To start, use the Blender UI to implement a material of your choice. Below, we show a simple snowy material comprised of a geometry nodegroup and a shader nodegroup applied to a highly subdivided cube. Please see the many excellent blender resources acknowledged in our README for help learning to use Blender's geometry and shader nodes. @@ -79,10 +84,10 @@ import bpy import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface def shader_material(nw: NodeWrangler): # Code generated using version 2.6.4 of the node_transpiler @@ -126,18 +131,18 @@ The last line of this script calls `apply` on the currently selected object in t ![Example setup before transpiling](images/implementing_assets/transpiler_demo.png) -You can then click play on the `generated_surface_script` to run it, and it should reconstruct similar nodegraphs on this new object. To include your new material in the infinigen repository, edit the `transpiler_dev_script` to say `mode=write_file`, then run it again on your original nodegraph to dump a file into the `worldgen/` folder which you can then move to `surfaces/templates/mymaterial.py`. You can now import and test your material script via the commandline [as described earlier](#generating_assets_materials_via_blender_python_commandline) +You can then click play on the `generated_surface_script` to run it, and it should reconstruct similar nodegraphs on this new object. To include your new material in the infinigen repository, edit the `transpiler_dev_script` to say `mode=write_file`, then run it again. This will dump a new file named `generated_surface_script.py` which you can then move to `infinigen/assets/materials/mymaterial.py`. You can now import and test your material script via the commandline [as described earlier](#generating_assets_materials_via_blender_python_commandline) ## Implementing a new 3D asset -All asset generators in Infinigen are defined by python files in `worldgen/assets`, usually following this template: +All asset generators in Infinigen are defined by python files in `infinigen/assets`, usually following this template: ```python import bpy import numpy as np -from placement.factory import AssetFactory -from util.math import FixedSeed +from infinigen.core.placement.factory import AssetFactory +from infinigen.core.util.math import FixedSeed class MyAssetFactory(AssetFactory): @@ -153,12 +158,17 @@ class MyAssetFactory(AssetFactory): You can implement the `create_asset` function however you wish so long as it produces a Blender Object as a result. Many existing assets use various different strategies, which you can use as examples: - `assets/flower.py` uses mostly auto-generated code from transpiling a hand-designed geometry node-graph. - `assets/grassland/grass_tuft.py` uses pure NumPy code to create and define a mesh. -- `assets/trees/generate.py` combines transpiled materials & leaves with a python-only space colonization algorithm. +- `assets/trees/examples/generate_nature.py` combines transpiled materials & leaves with a python-only space colonization algorithm. The simplest implementation for a new asset is to create a geometry nodes equivelant, transpile it similarly to as shown above, copy the code into the same file as the template shown above, and implement the `create_asset` function as shown: +<<<<<<< HEAD ```python from util import blender as butil +======= +``` +from infinigen.core.util import blender as butil +>>>>>>> 5e32cd3eb (Fix all imports and paths) ... @@ -174,13 +184,13 @@ class MyAssetFactory(AssetFactory): return obj ``` -If you place the above text in a file located at `worldgen/assets/myasset.py`, you can add the following script to your Blender TextEditor and click play to repeatedly reload and test your asset generator as you continue to refine it. +If you place the above text in a file located at `infinigen/assets/myasset.py`, you can add the following script to your Blender TextEditor and click play to repeatedly reload and test your asset generator as you continue to refine it. ```python import bpy import importlib -from assets import myasset +from infinigen.assets import myasset importlib.reload(myasset) seed = 0 diff --git a/examples/configs/base.gin b/examples/configs/base.gin index 486e39064..f6afc5926 100644 --- a/examples/configs/base.gin +++ b/examples/configs/base.gin @@ -187,19 +187,19 @@ camera.spawn_camera_rigs.camera_rig_config = [ ] # TERRAIN SEED # -surfaces.templates.ice.geo_ice.random_seed = %OVERALL_SEED -surfaces.templates.lava.lava_geo.random_seed = %OVERALL_SEED -surfaces.templates.mud.geo_mud.random_seed = %OVERALL_SEED -surfaces.templates.cobble_stone.geo_cobblestone.random_seed = %OVERALL_SEED -surfaces.templates.dirt.geo_dirt.random_seed = %OVERALL_SEED -surfaces.templates.stone.geo_stone.random_seed = %OVERALL_SEED -surfaces.templates.cracked_ground.geo_cracked_ground.random_seed = %OVERALL_SEED -surfaces.templates.soil.geometry_soil.random_seed = %OVERALL_SEED -surfaces.templates.chunkyrock.geo_rocks.random_seed = %OVERALL_SEED - -surfaces.templates.mountain.shader.random_seed = %OVERALL_SEED -surfaces.templates.sand.shader.random_seed = %OVERALL_SEED -surfaces.templates.water.shader.random_seed = %OVERALL_SEED +assets.materials.ice.geo_ice.random_seed = %OVERALL_SEED +assets.materials.lava.lava_geo.random_seed = %OVERALL_SEED +assets.materials.mud.geo_mud.random_seed = %OVERALL_SEED +assets.materials.cobble_stone.geo_cobblestone.random_seed = %OVERALL_SEED +assets.materials.dirt.geo_dirt.random_seed = %OVERALL_SEED +assets.materials.stone.geo_stone.random_seed = %OVERALL_SEED +assets.materials.cracked_ground.geo_cracked_ground.random_seed = %OVERALL_SEED +assets.materials.soil.geometry_soil.random_seed = %OVERALL_SEED +assets.materials.chunkyrock.geo_rocks.random_seed = %OVERALL_SEED + +assets.materials.mountain.shader.random_seed = %OVERALL_SEED +assets.materials.sand.shader.random_seed = %OVERALL_SEED +assets.materials.water.shader.random_seed = %OVERALL_SEED compose_scene.ground_creatures_chance = 0.0 compose_scene.ground_creature_registry = [ @@ -225,6 +225,6 @@ group_collections.config = [ {'name': 'animhelper', 'hide_viewport': False, 'hide_render': True}, # curves and iks ] -include 'config/base_surface_registry.gin' -include 'config/natural.gin' +include 'examples/configs/base_surface_registry.gin' +include 'examples/configs/natural.gin' diff --git a/examples/configs/natural.gin b/examples/configs/natural.gin index 5e4169198..67ce4ac03 100644 --- a/examples/configs/natural.gin +++ b/examples/configs/natural.gin @@ -1,3 +1,3 @@ -# surfaces.templates.water.shader.color = ("palette", "water") -surfaces.templates.mountain.shader.color = ("palette", "mountain soil") -surfaces.templates.sandstone.shader.color = ("palette", "sandstone") \ No newline at end of file +# assets.materials.water.shader.color = ("palette", "water") +assets.materials.mountain.shader.color = ("palette", "mountain soil") +assets.materials.sandstone.shader.color = ("palette", "sandstone") \ No newline at end of file diff --git a/examples/configs/performance/simple.gin b/examples/configs/performance/simple.gin index 5320ec9bc..724381975 100644 --- a/examples/configs/performance/simple.gin +++ b/examples/configs/performance/simple.gin @@ -1,5 +1,5 @@ -include 'config/performance/dev.gin' -include 'config/disable_assets/no_creatures.gin' -include 'config/performance/fast_terrain_assets.gin' +include 'examples/configs/performance/dev.gin' +include 'examples/configs/disable_assets/no_creatures.gin' +include 'examples/configs/performance/fast_terrain_assets.gin' run_erosion.n_iters = [1,1] full/render_image.num_samples = 64 \ No newline at end of file diff --git a/examples/configs/scene_types/arctic.gin b/examples/configs/scene_types/arctic.gin index 989aa10c4..f042e6a90 100644 --- a/examples/configs/scene_types/arctic.gin +++ b/examples/configs/scene_types/arctic.gin @@ -29,7 +29,7 @@ scene.warped_rocks_chance = 0 scene.ground_ice_chance = 1 scene.waterbody_chance = 1 -include 'config/disable_assets/no_assets.gin' +include 'examples/configs/disable_assets/no_assets.gin' compose_scene.wind_chance = 0.5 compose_scene.turbulence_chance = 0.5 diff --git a/examples/configs/scene_types/coral_reef.gin b/examples/configs/scene_types/coral_reef.gin index 5ae259bb2..6fdb25b74 100644 --- a/examples/configs/scene_types/coral_reef.gin +++ b/examples/configs/scene_types/coral_reef.gin @@ -1,4 +1,4 @@ -include 'config/scene_types/under_water.gin' +include 'examples/configs/scene_types/under_water.gin' compose_scene.kelp_chance = 0.1 compose_scene.urchin_chance = 0.1 diff --git a/examples/configs/scene_types/kelp_forest.gin b/examples/configs/scene_types/kelp_forest.gin index ee4710de4..b20df1df5 100644 --- a/examples/configs/scene_types/kelp_forest.gin +++ b/examples/configs/scene_types/kelp_forest.gin @@ -1,4 +1,4 @@ -include 'config/scene_types/under_water.gin' +include 'examples/configs/scene_types/under_water.gin' multi_mountains_params.height = ("uniform", 1, 4) multi_mountains_params.min_freq = ("uniform", 0.01, 0.015) diff --git a/examples/configs/scene_types/snowy_mountain.gin b/examples/configs/scene_types/snowy_mountain.gin index a8b6b74a7..5b40e8066 100644 --- a/examples/configs/scene_types/snowy_mountain.gin +++ b/examples/configs/scene_types/snowy_mountain.gin @@ -1,4 +1,4 @@ -include 'config/disable_assets/no_assets.gin' +include 'examples/configs/disable_assets/no_assets.gin' surface.registry.rock_collection = [ ('mountain', 1), @@ -26,8 +26,8 @@ compose_scene.flying_creature_registry = [ (@FlyingBirdFactory, 1), ] -surfaces.templates.mountain.shader.layered_mountain = 0 -surfaces.templates.mountain.shader.snowy = 0 # TODO: re-enable once terrain flickering resolved +assets.materials.mountain.shader.layered_mountain = 0 +assets.materials.mountain.shader.snowy = 0 # TODO: re-enable once terrain flickering resolved compose_scene.boulders_chance = 1 camera.camera_pose_proposal.pitch = ("clip_gaussian", 90, 30, 90, 100) diff --git a/examples/configs/scene_types_fluidsim/simulated_river.gin b/examples/configs/scene_types_fluidsim/simulated_river.gin index 6c81ae815..13bdf5145 100644 --- a/examples/configs/scene_types_fluidsim/simulated_river.gin +++ b/examples/configs/scene_types_fluidsim/simulated_river.gin @@ -1,4 +1,4 @@ -include 'config/scene_types/river.gin' +include 'examples/configs/scene_types/river.gin' UniformMesher.enclosed=1 animate_cameras.policy_registry = @cam/AnimPolicyRandomForwardWalk diff --git a/examples/configs/scene_types_fluidsim/tilted_river.gin b/examples/configs/scene_types_fluidsim/tilted_river.gin index 44e5f224c..560ae7569 100644 --- a/examples/configs/scene_types_fluidsim/tilted_river.gin +++ b/examples/configs/scene_types_fluidsim/tilted_river.gin @@ -1,4 +1,4 @@ -include 'config/scene_types/river.gin' +include 'examples/configs/scene_types/river.gin' UniformMesher.enclosed=1 animate_cameras.policy_registry = @cam/AnimPolicyRandomForwardWalk diff --git a/examples/generate_asset_demo.py b/examples/generate_asset_demo.py index 2dc3f6185..9b61a7deb 100644 --- a/examples/generate_asset_demo.py +++ b/examples/generate_asset_demo.py @@ -16,22 +16,22 @@ import numpy as np from tqdm import tqdm, trange -sys.path.append(os.getcwd()) -from terrain import Terrain - -from assets.small_plants.fern import FernFactory -from assets.creatures.animation.run_cycle import follow_path -from lighting import lighting, kole_clouds -from surfaces.scatters import grass, rocks, pine_needle, pinecone -from surfaces.templates import mountain, sand, water, atmosphere_light_haze, sandstone, cracked_ground, \ - soil, dirt, cobble_stone, chunkyrock, stone, lava, ice, mud, snow, clouds - -from placement import placement, density, camera as cam_util -from placement.split_in_view import split_inview -from util import blender as butil - -import core as infinigen +from infinigen.terrain import Terrain +from infinigen.assets.small_plants.fern import FernFactory +from infinigen.assets.creatures.util.animation.run_cycle import follow_path +from infinigen.assets.lighting import sky_lighting +from infinigen.assets.weather import kole_clouds +from infinigen.assets.scatters import grass, pebbles, pine_needle, pinecone +from infinigen.assets.materials import ( + mountain, sand, water, atmosphere_light_haze, sandstone, cracked_ground, \ + soil, dirt, cobble_stone, chunkyrock, stone, lava, ice, mud, snow +) +from infinigen.core.placement import placement, density, camera as cam_util +from infinigen.core.placement.split_in_view import split_inview +from infinigen.core.util import blender as butil + +from infinigen.core import execute_tasks def find_flat_location( mesh, @@ -101,7 +101,7 @@ def compose_scene( **params ): - lighting.add_lighting() + sky_lighting.add_lighting() if params.get("fancy_clouds", 0): kole_clouds.add_kole_clouds() @@ -159,11 +159,11 @@ def compose_scene( pass elif background == 'grass': grass.apply(terrain_inview) - rocks.apply(terrain_inview) + pebbles.apply(terrain_inview) elif background == 'pine_forest': pine_needle.apply(terrain_inview) pinecone.apply(terrain_inview) - rocks.apply(terrain_inview) + pebbles.apply(terrain_inview) elif background == 'TODO ADD MORE OPTIONS HERE': pass else: @@ -196,10 +196,15 @@ def main(): datefmt='%H:%M:%S' ) - scene_seed = infinigen.apply_scene_seed(args) - infinigen.apply_gin_configs(args, scene_seed, skip_unknown=True) + scene_seed = execute_tasks.apply_scene_seed(args) + execute_tasks.apply_gin_configs( + args, + Path(__file__).parent/'configs', + mandatory_config_dir=Path(__file__).parent/'configs/scene_types', + skip_unknown=True + ) - infinigen.main( + execute_tasks.main( compose_scene_func=compose_scene, input_folder=args.input_folder, output_folder=args.output_folder, diff --git a/examples/generate_individual_assets.py b/examples/generate_individual_assets.py index 56e823d47..8e1f7040a 100644 --- a/examples/generate_individual_assets.py +++ b/examples/generate_individual_assets.py @@ -21,29 +21,24 @@ import bpy import gin import numpy as np - -sys.path.insert(0, os.getcwd()) from PIL import Image -from lighting import lighting -from surfaces import surface -from placement import density -from util import blender as butil -from fluid.fluid import set_obj_on_fire -from placement.factory import AssetFactory - -from rendering.render import enable_gpu -from assets.utils.decorate import assign_material, read_base_co -import tools.results.strip_alpha_background as strip_alpha_background -from util.math import FixedSeed -from util import blender as butil -from util.camera import get_3x4_P_matrix_from_blender -from util.logging import Suppress +from infinigen.assets.fluid.fluid import set_obj_on_fire +from infinigen.assets.utils.decorate import assign_material, read_base_co +from infinigen.assets.utils.tag import tag_object, tag_nodegroup, tag_system +from infinigen.assets.lighting import sky_lighting -from assets.utils.tag import tag_object, tag_nodegroup, tag_system +from infinigen.core import surface +from infinigen.core.placement import density, factory +from infinigen.core.rendering.render import enable_gpu +from infinigen.core.util.math import FixedSeed +from infinigen.core.util.camera import get_3x4_P_matrix_from_blender +from infinigen.core.util.logging import Suppress +from infinigen.core.util import blender as butil -import generate # to load most/all AssetFactory subclasses +from datagen.tools.results import strip_alpha_background as strip_alpha_background +import generate_nature # to load most/all factory.AssetFactory subclasses def build_scene_asset(factory_name, idx): factory = None @@ -114,7 +109,7 @@ def build_scene_surface(factory_name, idx): except ModuleNotFoundError: try: with gin.unlock_config(): - template = importlib.import_module(f'surfaces.templates.{factory_name}') + template = importlib.import_module(f'assets.materials.{factory_name}') bpy.ops.mesh.primitive_ico_sphere_add(radius=.8, subdivisions=9) asset = bpy.context.active_object template.apply(asset) @@ -140,7 +135,7 @@ def build_scene(path, idx, factory_name, args): camera, center = setup_camera(args) with FixedSeed(args.lighting): - lighting.add_lighting(camera) + sky_lighting.add_lighting(camera) nodes = bpy.data.worlds['World'].node_tree.nodes sky_texture = [n for n in nodes if n.name.startswith('Sky Texture')][-1] sky_texture.sun_elevation = np.deg2rad(args.elevation) @@ -286,13 +281,13 @@ def main(args): factories = list(args.factories) if 'ALL_ASSETS' in factories: - factories += [f.__name__ for f in AssetFactory.__subclasses__()] + factories += [f.__name__ for f in factory.AssetFactory.__subclasses__()] factories.remove('ALL_ASSETS') if 'ALL_SCATTERS' in factories: factories += [f.stem for f in Path('surfaces/scatters').iterdir()] factories.remove('ALL_SCATTERS') if 'ALL_MATERIALS' in factories: - factories += [f.stem for f in Path('surfaces/templates').iterdir()] + factories += [f.stem for f in Path('infinigen/assets/materials').iterdir()] factories.remove('ALL_MATERIALS') for factory in factories: diff --git a/examples/generate_nature.py b/examples/generate_nature.py index 9295c3da1..68fbb4d5c 100644 --- a/examples/generate_nature.py +++ b/examples/generate_nature.py @@ -15,68 +15,54 @@ import numpy as np from numpy.random import uniform, normal, randint -sys.path.append(os.getcwd()) - -from terrain import Terrain -from util.organization import Task, Attributes, Tags, ElementNames - -from lighting import lighting, kole_clouds +from infinigen.core.placement import ( + particles, placement, density, + camera as cam_util, + split_in_view, factory, + animation_policy, instance_scatter, detail, +) -from assets.trees.generate import TreeFactory, BushFactory, random_season, random_leaf_collection -from assets.glowing_rocks import GlowingRocksFactory -from assets.creatures import ( +from infinigen.assets.creatures import ( CarnivoreFactory, HerbivoreFactory, FishFactory, FishSchoolFactory, \ BeetleFactory, AntSwarmFactory, BirdFactory, SnakeFactory, \ - CrustaceanFactory, FlyingBirdFactory, CrabFactory, LobsterFactory, SpinyLobsterFactory + CrustaceanFactory, FlyingBirdFactory, CrabFactory, LobsterFactory, SpinyLobsterFactory, \ + DragonflyFactory ) -from assets.insects.assembled.dragonfly import DragonflyFactory -from assets.cloud.generate import CloudFactory -from assets.cactus import CactusFactory - -from fluid.flip_fluid import make_river, make_tilted_river -from fluid.fluid_scenecomp_additions import fire_scenecomp_options -import surfaces.scatters -from surfaces.scatters import ( - rocks, grass, snow_layer, ground_leaves, ground_twigs, \ +from infinigen.assets.scatters import ( + pebbles, grass, snow_layer, ground_leaves, ground_twigs, \ chopped_trees, pinecone, fern, flowerplant, monocot, ground_mushroom, \ - slime_mold, moss, ivy, lichen, mushroom, decorative_plants, seashells + slime_mold, moss, ivy, lichen, mushroom, decorative_plants, seashells, \ + pine_needle, seaweed, coral_reef, jellyfish, urchin ) -from surfaces.scatters.utils.selection import scatter_lower, scatter_upward -from surfaces.templates import ( + +from infinigen.assets.materials import ( mountain, sand, water, atmosphere_light_haze, sandstone, cracked_ground, \ - soil, dirt, cobble_stone, chunkyrock, stone, lava, ice, mud + soil, dirt, cobble_stone, chunkyrock, stone, lava, ice, mud, snow ) -from infinigen_gpl.surfaces import snow -from placement import ( - particles, placement, density, - camera as cam_util, - animation_policy, instance_scatter, detail +from infinigen.assets import ( + fluid, cactus, cactus, trees, monocot, rocks, underwater ) -from placement.split_in_view import split_inview -from assets import particles as particle_assets - -from surfaces.scatters import pine_needle, seaweed, coral_reef, jellyfish, urchin -from assets import boulder, cactus, caustics_lamp -from assets.monocot import kelp -from surfaces import surface - -import surfaces.scatters - -from placement.factory import make_asset_collection -from util import blender as butil -from util.logging import Timer -from util.math import FixedSeed, int_hash -from util.pipeline import RandomStageExecutor -from util.random import sample_registry, random_general +from infinigen.terrain import Terrain +from infinigen.assets.lighting import sky_lighting, glowing_rocks, caustics_lamp +from infinigen.assets.weather import kole_clouds, particles, cloud + +from infinigen.core.util import ( + blender as butil, + logging as logging_util, + pipeline, +) +from infinigen.core.util.organization import Tags +from infinigen.core.util.random import sample_registry, random_general +from infinigen.core.util.math import FixedSeed, int_hash -import core as infinigen +from infinigen.core import execute_tasks, surface @gin.configurable def compose_scene(output_folder, scene_seed, **params): - p = RandomStageExecutor(scene_seed, output_folder, params) + p = pipeline.RandomStageExecutor(scene_seed, output_folder, params) def add_coarse_terrain(): terrain = Terrain(scene_seed, surface.registry, task='coarse', on_the_fly_asset_folder=output_folder/"assets") @@ -97,7 +83,7 @@ def add_coarse_terrain(): p.run_stage('fancy_clouds', kole_clouds.add_kole_clouds) - season = p.run_stage('season', random_season, use_chance=False) + season = p.run_stage('season', trees.random_season, use_chance=False) logging.info(f'{season=}') def choose_forest_params(): @@ -113,7 +99,7 @@ def choose_forest_params(): def add_trees(terrain_mesh): for i, params in enumerate(tree_species_params): - fac = TreeFactory(np.random.randint(1e7), coarse=True) + fac = trees.TreeFactory(np.random.randint(1e7), coarse=True) selection = density.placement_mask(params['select_scale'], tag=land_domain) placement.scatter_placeholders_mesh(terrain_mesh, fac, selection=selection, altitude=-0.1, overall_density=params['density'], distance_min=params['distance_min']) @@ -123,7 +109,7 @@ def add_bushes(terrain_mesh): n_bush_species = randint(1, params.get("max_bush_species", 2) + 1) for i in range(n_bush_species): spec_density = params.get("bush_density", uniform(0.03, 0.12)) / n_bush_species - fac = BushFactory(int_hash((scene_seed, i)), coarse=True) + fac = trees.BushFactory(int_hash((scene_seed, i)), coarse=True) selection = density.placement_mask(uniform(0.015, 0.2), normal_thresh=0.3, select_thresh=uniform(0.5, 0.6), tag=land_domain) placement.scatter_placeholders_mesh(terrain_mesh, fac, altitude=-0.05, @@ -132,7 +118,7 @@ def add_bushes(terrain_mesh): p.run_stage('bushes', add_bushes, terrain_mesh) def add_clouds(terrain_mesh): - cloud_factory = CloudFactory(int_hash((scene_seed, 0)), coarse=True, terrain_mesh=terrain_mesh) + cloud_factory = cloud.CloudFactory(int_hash((scene_seed, 0)), coarse=True, terrain_mesh=terrain_mesh) placement.scatter_placeholders(cloud_factory.spawn_locations(), cloud_factory) p.run_stage('clouds', add_clouds, terrain_mesh) @@ -140,23 +126,23 @@ def add_boulders(terrain_mesh): n_boulder_species = randint(1, params.get("max_boulder_species", 5)) for i in range(n_boulder_species): selection = density.placement_mask(0.05, tag=nonliving_domain, select_thresh=uniform(0.55, 0.6)) - fac = boulder.BoulderFactory(int_hash((scene_seed, i)), coarse=True) + fac = rocks.BoulderFactory(int_hash((scene_seed, i)), coarse=True) placement.scatter_placeholders_mesh(terrain_mesh, fac, overall_density=params.get("boulder_density", uniform(.02, .05)) / n_boulder_species, selection=selection, altitude=-0.25) p.run_stage('boulders', add_boulders, terrain_mesh) - fire_scenecomp_options(p, terrain_mesh, params, tree_species_params) + fluid.cached_fire_scenecomp_options(p, terrain_mesh, params, tree_species_params) def add_glowing_rocks(terrain_mesh): selection = density.placement_mask(uniform(0.03, 0.3), normal_thresh=-1.1, select_thresh=0, tag=Tags.Cave) - fac = GlowingRocksFactory(int_hash((scene_seed, 0)), coarse=True) + fac = glowing_rocks.GlowingRocksFactory(int_hash((scene_seed, 0)), coarse=True) placement.scatter_placeholders_mesh(terrain_mesh, fac, overall_density=params.get("glow_rock_density", 0.025), selection=selection) p.run_stage('glowing_rocks', add_glowing_rocks, terrain_mesh) def add_kelp(terrain_mesh): - fac = kelp.KelpMonocotFactory(int_hash((scene_seed, 0)), coarse=True) + fac = monocot.KelpMonocotFactory(int_hash((scene_seed, 0)), coarse=True) selection = density.placement_mask(scale=0.05, tag=underwater_domain) placement.scatter_placeholders_mesh(terrain_mesh, fac, altitude=-0.05, overall_density=params.get('kelp_density', uniform(.2, 1)), @@ -187,11 +173,11 @@ def camera_preprocess(): ) cam = cam_util.get_camera(0, 0) - p.run_stage('lighting', lighting.add_lighting, cam, use_chance=False) + p.run_stage('lighting', sky_lighting.add_lighting, cam, use_chance=False) # determine a small area of the terrain for the creatures to run around on # must happen before camera is animated, as camera may want to follow them around - terrain_center, *_ = split_inview(terrain_mesh, cam=cam, + terrain_center, *_ = split_in_view.split_inview(terrain_mesh, cam=cam, start=0, end=0, outofview=False, vis_margin=5, dist_max=params["center_distance"], hide_render=True, suffix='center') deps = bpy.context.evaluated_depsgraph_get() @@ -219,11 +205,15 @@ def flying_creatures(): p.run_stage('animate_cameras', lambda: cam_util.animate_cameras( camera_rigs, scene_preprocessed, pois=pois), use_chance=False) - with Timer('Compute coarse terrain frustrums'): - terrain_inview, *_ = split_inview(terrain_mesh, verbose=True, outofview=False, print_areas=True, - cam=cam, vis_margin=2, dist_max=params['inview_distance'], hide_render=True, suffix='inview') - terrain_near, *_ = split_inview(terrain_mesh, verbose=True, outofview=False, print_areas=True, - cam=cam, vis_margin=2, dist_max=params['near_distance'], hide_render=True, suffix='near') + with logging_util.Timer('Compute coarse terrain frustrums'): + terrain_inview, *_ = split_in_view.split_inview( + terrain_mesh, verbose=True, outofview=False, print_areas=True, + cam=cam, vis_margin=2, dist_max=params['inview_distance'], hide_render=True, suffix='inview' + ) + terrain_near, *_ = split_in_view.split_inview( + terrain_mesh, verbose=True, outofview=False, print_areas=True, + cam=cam, vis_margin=2, dist_max=params['near_distance'], hide_render=True, suffix='near' + ) collider = butil.modify_mesh(butil.deep_clone_obj(terrain_near), 'COLLISION', apply=False, show_viewport=True) collider.name = collider.name + '.collider' @@ -260,25 +250,25 @@ def add_bug_swarm(): def add_rocks(target): selection = density.placement_mask(scale=0.15, select_thresh=0.5, normal_thresh=0.7, return_scalar=True, tag=nonliving_domain) - _, rock_col = surfaces.scatters.rocks.apply(target, selection=selection) + _, rock_col = pebbles.apply(target, selection=selection) return rock_col p.run_stage('rocks', add_rocks, terrain_inview) def add_ground_leaves(target): selection = density.placement_mask(scale=0.1, select_thresh=0.52, normal_thresh=0.7, return_scalar=True, tag=land_domain) - surfaces.scatters.ground_leaves.apply(target, selection=selection, season=season) + ground_leaves.apply(target, selection=selection, season=season) p.run_stage('ground_leaves', add_ground_leaves, terrain_near, prereq='trees') def add_ground_twigs(target): use_leaves = uniform() < 0.5 selection = density.placement_mask(scale=0.15, select_thresh=0.55, normal_thresh=0.7, return_scalar=True, tag=nonliving_domain) - surfaces.scatters.ground_twigs.apply(target, selection=selection, use_leaves=use_leaves) + ground_twigs.apply(target, selection=selection, use_leaves=use_leaves) p.run_stage('ground_twigs', add_ground_twigs, terrain_near) def add_chopped_trees(target): selection = density.placement_mask(scale=0.15, select_thresh=uniform(0.55, 0.6), normal_thresh=0.7, return_scalar=True, tag=nonliving_domain) - surfaces.scatters.chopped_trees.apply(target, selection=selection) + chopped_trees.apply(target, selection=selection) p.run_stage('chopped_trees', add_chopped_trees, terrain_inview) def add_grass(target): @@ -286,29 +276,29 @@ def add_grass(target): selection = density.placement_mask( normal_dir=(0, 0, 1), scale=0.1, tag=land_domain, return_scalar=True, select_thresh=uniform(select_max/2, select_max)) - surfaces.scatters.grass.apply(target, selection=selection) + grass.apply(target, selection=selection) p.run_stage('grass', add_grass, terrain_inview) def add_monocots(target): selection = density.placement_mask( normal_dir=(0, 0, 1), scale=0.2, tag=land_domain) - surfaces.scatters.monocot.apply(terrain_inview, grass=True, selection=selection) + monocot.apply(terrain_inview, grass=True, selection=selection) selection = density.placement_mask( normal_dir=(0, 0, 1), scale=0.2, select_thresh=0.55, tag=params.get("grass_habitats", None)) - surfaces.scatters.monocot.apply(target, grass=False, selection=selection) + monocot.apply(target, grass=False, selection=selection) p.run_stage('monocots', add_monocots, terrain_inview) def add_ferns(target): selection = density.placement_mask(normal_dir=(0, 0, 1), scale=0.1, select_thresh=0.6, return_scalar=True, tag=land_domain) - surfaces.scatters.fern.apply(target, selection=selection) + fern.apply(target, selection=selection) p.run_stage('ferns', add_ferns, terrain_inview) def add_flowers(target): selection = density.placement_mask(normal_dir=(0, 0, 1), scale=0.01, select_thresh=0.6, return_scalar=True, tag=land_domain) - surfaces.scatters.flowerplant.apply(target, selection=selection) + flowerplant.apply(target, selection=selection) p.run_stage('flowers', add_flowers, terrain_inview) def add_corals(target): @@ -320,7 +310,7 @@ def add_corals(target): density=params.get('horizontal_coral_density', 2.5)) p.run_stage('corals', add_corals, terrain_inview) - p.run_stage('mushroom', lambda: surfaces.scatters.ground_mushroom.Mushrooms().apply(terrain_near, + p.run_stage('mushroom', lambda: ground_mushroom.Mushrooms().apply(terrain_near, selection=density.placement_mask(scale=.1, select_thresh=.65, return_scalar=True, tag=land_domain), density=params.get('mushroom_density', 2))) @@ -331,43 +321,43 @@ def add_corals(target): p.run_stage('jellyfish', lambda: jellyfish.apply(terrain_inview, selection=density.placement_mask(scale=0.05, select_thresh=.5, tag=underwater_domain))) - p.run_stage('seashells', lambda: surfaces.scatters.seashells.apply(terrain_near, + p.run_stage('seashells', lambda: seashells.apply(terrain_near, selection=density.placement_mask(scale=0.05, select_thresh=.5, tag='landscape,', return_scalar=True))) - p.run_stage('pinecone', lambda: surfaces.scatters.pinecone.apply(terrain_near, + p.run_stage('pinecone', lambda: pinecone.apply(terrain_near, selection=density.placement_mask(scale=.1, select_thresh=.63, tag=land_domain))) p.run_stage('pine_needle', lambda: pine_needle.apply(terrain_near, selection=density.placement_mask(scale=uniform(0.05, 0.2), select_thresh=uniform(0.4, 0.55), tag=land_domain, return_scalar=True))) - p.run_stage('decorative_plants', lambda: surfaces.scatters.decorative_plants.apply(terrain_near, + p.run_stage('decorative_plants', lambda: decorative_plants.apply(terrain_near, selection=density.placement_mask(scale=uniform(0.05, 0.2), select_thresh=uniform(0.5, 0.65), tag=land_domain, return_scalar=True))) - p.run_stage('wind', particle_assets.wind_effector) - p.run_stage('turbulence', particle_assets.turbulence_effector) + p.run_stage('wind', particles.wind_effector) + p.run_stage('turbulence', particles.turbulence_effector) emitter_off = Vector((0, 0, 5)) # to allow space to fall into frame from off screen def add_leaf_particles(): return particles.particle_system( emitter=butil.spawn_plane(location=emitter_off, size=60), - subject=random_leaf_collection(n=5, season=season), + subject=trees.random_leaf_collection(n=5, season=season), settings=particles.falling_leaf_settings()) def add_rain_particles(): return particles.particle_system( emitter=butil.spawn_plane(location=emitter_off, size=30), - subject=make_asset_collection(particle_assets.RaindropFactory(scene_seed), 5), + subject=factory.make_asset_collection(particles.RaindropFactory(scene_seed), 5), settings=particles.rain_settings()) def add_dust_particles(): return particles.particle_system( emitter=butil.spawn_cube(location=Vector(), size=30), - subject=make_asset_collection(particle_assets.DustMoteFactory(scene_seed), 5), + subject=factory.make_asset_collection(particles.DustMoteFactory(scene_seed), 5), settings=particles.floating_dust_settings()) def add_marine_snow_particles(): return particles.particle_system( emitter=butil.spawn_cube(location=Vector(), size=30), - subject=make_asset_collection(particle_assets.DustMoteFactory(scene_seed), 5), + subject=factory.make_asset_collection(particles.DustMoteFactory(scene_seed), 5), settings=particles.marine_snow_setting()) def add_snow_particles(): return particles.particle_system( emitter=butil.spawn_plane(location=emitter_off, size=60), - subject=make_asset_collection(particle_assets.SnowflakeFactory(scene_seed), 5), + subject=factory.make_asset_collection(particles.SnowflakeFactory(scene_seed), 5), settings=particles.snow_settings()) particle_systems = [ @@ -379,7 +369,7 @@ def add_snow_particles(): ] for emitter, system in filter(lambda s: s is not None, particle_systems): - with Timer(f"Baking particle system"): + with logging_util.Timer(f"Baking particle system"): butil.constrain_object(emitter, "COPY_LOCATION", use_offset=True, target=cam.parent) particles.bake(emitter, system) butil.put_in_collection(emitter, butil.get_collection('particles')) @@ -389,10 +379,10 @@ def add_snow_particles(): c.all_objects for c in bpy.data.collections if c.name.startswith('placeholders:') )) - add_simulated_river = lambda: make_river(terrain_mesh, placeholders, output_folder=output_folder) + add_simulated_river = lambda: fluid.make_river(terrain_mesh, placeholders, output_folder=output_folder) p.run_stage('simulated_river', add_simulated_river, use_chance=False) - add_tilted_river = lambda: make_tilted_river(terrain_mesh, placeholders, output_folder=output_folder) + add_tilted_river = lambda: fluid.make_tilted_river(terrain_mesh, placeholders, output_folder=output_folder) p.run_stage('tilted_river', add_tilted_river, use_chance=False) p.save_results(output_folder/'pipeline_coarse.csv') @@ -427,10 +417,14 @@ def main(): datefmt='%H:%M:%S' ) - scene_seed = infinigen.apply_scene_seed(args) - infinigen.apply_gin_configs(args, scene_seed) + scene_seed = execute_tasks.apply_scene_seed(args) + execute_tasks.apply_gin_configs( + args, + Path(__file__).parent/'configs', + mandatory_config_dir=Path(__file__).parent/'configs/scene_types', + ) - infinigen.main( + execute_tasks.main( compose_scene_func=compose_scene, input_folder=args.input_folder, output_folder=args.output_folder, diff --git a/examples/scripts/render_river_video.sh b/examples/scripts/render_river_video.sh deleted file mode 100644 index ad627d111..000000000 --- a/examples/scripts/render_river_video.sh +++ /dev/null @@ -1,11 +0,0 @@ -# TEMP. REMOVE BEFORE MERGE. - -HOSTFIRST=$(hostname | tr "." "\n" | head -n 1) -JOBNAME=$(date '+%m_%d_%H_%M').$HOSTFIRST.$1 -if [ "$2" = "dev" ]; then - python -m infinigen.datagen.manage_jobs --output_folder $3/$JOBNAME --num_scenes 20 \ - --pipeline_config $1 monocular_video_river enable_gpu opengl_gt --wandb_mode online --cleanup none --warmup_sec 12000 --config trailer_river dev reuse_terrain_assets simulated_river -else - python -m infinigen.datagen.manage_jobs --output_folder $3/$JOBNAME --num_scenes 50 \ - --pipeline_config $1 monocular_video_river enable_gpu opengl_gt --wandb_mode online --cleanup big_files --warmup_sec 12000 --config trailer_river reuse_terrain_assets simulated_river high_quality_terrain -fi diff --git a/examples/scripts/render_video_fire.sh b/examples/scripts/render_video_fire.sh deleted file mode 100644 index 874d665e6..000000000 --- a/examples/scripts/render_video_fire.sh +++ /dev/null @@ -1,6 +0,0 @@ -# TEMP. REMOVE BEFORE MERGE. - -HOSTFIRST=$(hostname | tr "." "\n" | head -n 1) -JOBNAME=$(date '+%m_%d_%H_%M').$HOSTFIRST.$1 -python -m infinigen.datagen.manage_jobs --output_folder $3/$JOBNAME --num_scenes $2 \ - --pipeline_config $1 monocular_video enable_gpu opengl_gt --wandb_mode online --cleanup none --warmup_sec 10000 --config trailer high_quality_terrain reuse_terrain_assets use_on_the_fly_fire diff --git a/infinigen/assets/cactus/base.py b/infinigen/assets/cactus/base.py index fbcd57b18..b83ec5fa0 100644 --- a/infinigen/assets/cactus/base.py +++ b/infinigen/assets/cactus/base.py @@ -6,11 +6,11 @@ import bpy -from assets.cactus.spike import make_default_selections -from assets.utils.decorate import write_attribute -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from placement.factory import AssetFactory +from infinigen.assets.cactus.spike import make_default_selections +from infinigen.assets.utils.decorate import write_attribute +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core.placement.factory import AssetFactory class BaseCactusFactory(AssetFactory): spike_distance = .025 diff --git a/infinigen/assets/cactus/columnar.py b/infinigen/assets/cactus/columnar.py index 2e747ce9a..177105eaa 100644 --- a/infinigen/assets/cactus/columnar.py +++ b/infinigen/assets/cactus/columnar.py @@ -8,14 +8,14 @@ import numpy as np from numpy.random import uniform -from assets.utils.decorate import geo_extension -from assets.utils.nodegroup import align_tilt -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from surfaces import surface -from assets.cactus.base import BaseCactusFactory -from assets.trees.tree import build_radius_tree -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.utils.decorate import geo_extension +from infinigen.assets.utils.nodegroup import align_tilt +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core import surface +from infinigen.assets.cactus.base import BaseCactusFactory +from infinigen.assets.trees.tree import build_radius_tree +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class ColumnarBaseCactusFactory(BaseCactusFactory): diff --git a/infinigen/assets/cactus/generate.py b/infinigen/assets/cactus/generate.py index 52a63275c..91307a747 100644 --- a/infinigen/assets/cactus/generate.py +++ b/infinigen/assets/cactus/generate.py @@ -10,21 +10,21 @@ import numpy as np from numpy.random import uniform -import util.blender as butil +import infinigen.core.util.blender as butil from .base import BaseCactusFactory from .globular import GlobularBaseCactusFactory from .columnar import ColumnarBaseCactusFactory from .pricky_pear import PrickyPearBaseCactusFactory from .kalidium import KalidiumBaseCactusFactory -from assets.cactus import spike -from assets.utils.misc import build_color_ramp, log_uniform -from assets.utils.decorate import assign_material, join_objects -from nodes.node_wrangler import NodeWrangler, Nodes -from placement.detail import remesh_with_attrs -from surfaces import surface -from placement.factory import AssetFactory -from util.math import FixedSeed -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.cactus import spike +from infinigen.assets.utils.misc import build_color_ramp, log_uniform +from infinigen.assets.utils.decorate import assign_material, join_objects +from infinigen.core.nodes.node_wrangler import NodeWrangler, Nodes +from infinigen.core.placement.detail import remesh_with_attrs +from infinigen.core import surface +from infinigen.core.placement.factory import AssetFactory +from infinigen.core.util.math import FixedSeed +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class CactusFactory(AssetFactory): diff --git a/infinigen/assets/cactus/globular.py b/infinigen/assets/cactus/globular.py index 730e12671..0ccc5c516 100644 --- a/infinigen/assets/cactus/globular.py +++ b/infinigen/assets/cactus/globular.py @@ -7,17 +7,17 @@ import bpy from numpy.random import uniform -from assets.cactus.base import BaseCactusFactory +from infinigen.assets.cactus.base import BaseCactusFactory import numpy as np -from assets.utils.object import new_cube -from assets.utils.decorate import geo_extension -from assets.utils.misc import log_uniform -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from surfaces import surface -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.utils.object import new_cube +from infinigen.assets.utils.decorate import geo_extension +from infinigen.assets.utils.misc import log_uniform +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core import surface +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class GlobularBaseCactusFactory(BaseCactusFactory): diff --git a/infinigen/assets/cactus/kalidium.py b/infinigen/assets/cactus/kalidium.py index 783de0547..3bc0d075f 100644 --- a/infinigen/assets/cactus/kalidium.py +++ b/infinigen/assets/cactus/kalidium.py @@ -8,20 +8,20 @@ import numpy as np from numpy.random import uniform -from assets.trees.tree import TreeVertices, build_radius_tree, recursive_path -from assets.utils.nodegroup import geo_radius -from assets.utils.object import data2mesh, mesh2obj, new_cube, origin2lowest -from assets.utils.decorate import displace_vertices, geo_extension, read_co, remove_vertices, separate_loose, \ +from infinigen.assets.trees.tree import TreeVertices, build_radius_tree, recursive_path +from infinigen.assets.utils.nodegroup import geo_radius +from infinigen.assets.utils.object import data2mesh, mesh2obj, new_cube, origin2lowest +from infinigen.assets.utils.decorate import displace_vertices, geo_extension, read_co, remove_vertices, separate_loose, \ subsurface2face_size -from assets.utils.shortest_path import geo_shortest_path -from nodes.node_info import Nodes +from infinigen.assets.utils.shortest_path import geo_shortest_path +from infinigen.core.nodes.node_info import Nodes -from placement.factory import AssetFactory, make_asset_collection -from nodes.node_wrangler import NodeWrangler -from surfaces import surface -from assets.cactus.base import BaseCactusFactory -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.placement.factory import AssetFactory, make_asset_collection +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core import surface +from infinigen.assets.cactus.base import BaseCactusFactory +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class KalidiumBaseCactusFactory(BaseCactusFactory): diff --git a/infinigen/assets/cactus/pricky_pear.py b/infinigen/assets/cactus/pricky_pear.py index 50bfca81a..c7194cdee 100644 --- a/infinigen/assets/cactus/pricky_pear.py +++ b/infinigen/assets/cactus/pricky_pear.py @@ -8,16 +8,16 @@ import numpy as np from numpy.random import uniform -from assets.utils.object import new_cube -from assets.utils.decorate import geo_extension, join_objects -from assets.utils.misc import log_uniform -from surfaces.surface import write_attr_data -from util import blender as butil -from assets.cactus.base import BaseCactusFactory -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from surfaces import surface -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.utils.object import new_cube +from infinigen.assets.utils.decorate import geo_extension, join_objects +from infinigen.assets.utils.misc import log_uniform +from infinigen.core.surface import write_attr_data +from infinigen.core.util import blender as butil +from infinigen.assets.cactus.base import BaseCactusFactory +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core import surface +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class PrickyPearBaseCactusFactory(BaseCactusFactory): spike_distance = .08 diff --git a/infinigen/assets/cactus/spike.py b/infinigen/assets/cactus/spike.py index 72cf3269c..055f952da 100644 --- a/infinigen/assets/cactus/spike.py +++ b/infinigen/assets/cactus/spike.py @@ -8,17 +8,17 @@ import numpy as np from numpy.random import uniform -from util import blender as butil -from assets.utils.misc import sample_direction -from assets.utils.decorate import assign_material -from assets.utils.nodegroup import geo_radius -from placement.factory import AssetFactory, make_asset_collection -from nodes.node_wrangler import NodeWrangler, Nodes -from surfaces import surface -from assets.trees.tree import build_radius_tree -import util.blender as butil -from util.blender import deep_clone_obj -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.util import blender as butil +from infinigen.assets.utils.misc import sample_direction +from infinigen.assets.utils.decorate import assign_material +from infinigen.assets.utils.nodegroup import geo_radius +from infinigen.core.placement.factory import AssetFactory, make_asset_collection +from infinigen.core.nodes.node_wrangler import NodeWrangler, Nodes +from infinigen.core import surface +from infinigen.assets.trees.tree import build_radius_tree +import infinigen.core.util.blender as butil +from infinigen.core.util.blender import deep_clone_obj +from infinigen.assets.utils.tag import tag_object, tag_nodegroup def build_spikes(base_radius=.002, **kwargs): n_branch = 4 diff --git a/infinigen/assets/underwater/corals/__init__.py b/infinigen/assets/corals/__init__.py similarity index 100% rename from infinigen/assets/underwater/corals/__init__.py rename to infinigen/assets/corals/__init__.py diff --git a/infinigen/assets/underwater/corals/base.py b/infinigen/assets/corals/base.py similarity index 91% rename from infinigen/assets/underwater/corals/base.py rename to infinigen/assets/corals/base.py index b85b22b62..3fcec97e1 100644 --- a/infinigen/assets/underwater/corals/base.py +++ b/infinigen/assets/corals/base.py @@ -6,7 +6,7 @@ import bpy -from placement.factory import AssetFactory +from infinigen.core.placement.factory import AssetFactory class BaseCoralFactory(AssetFactory): diff --git a/infinigen/assets/underwater/corals/diff_growth.py b/infinigen/assets/corals/diff_growth.py similarity index 88% rename from infinigen/assets/underwater/corals/diff_growth.py rename to infinigen/assets/corals/diff_growth.py index a1a657237..cfd799951 100644 --- a/infinigen/assets/underwater/corals/diff_growth.py +++ b/infinigen/assets/corals/diff_growth.py @@ -7,16 +7,16 @@ import numpy as np from numpy.random import uniform -from assets.corals.base import BaseCoralFactory -from assets.corals.tentacles import make_upward_points_fn, make_radius_points_fn -from infinigen_gpl.extras.diff_growth import build_diff_growth -from assets.utils.object import mesh2obj, data2mesh -from assets.utils.decorate import geo_extension, read_co -from assets.utils.mesh import polygon_angles -import util.blender as butil -from surfaces import surface -from util.math import FixedSeed -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.corals.base import BaseCoralFactory +from infinigen.assets.corals.tentacles import make_upward_points_fn, make_radius_points_fn +from infinigen.infinigen_gpl.extras.diff_growth import build_diff_growth +from infinigen.assets.utils.object import mesh2obj, data2mesh +from infinigen.assets.utils.decorate import geo_extension, read_co +from infinigen.assets.utils.mesh import polygon_angles +import infinigen.core.util.blender as butil +from infinigen.core import surface +from infinigen.core.util.math import FixedSeed +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class DiffGrowthBaseCoralFactory(BaseCoralFactory): default_scale = [1] * 3 diff --git a/infinigen/assets/underwater/corals/elkhorn.py b/infinigen/assets/corals/elkhorn.py similarity index 88% rename from infinigen/assets/underwater/corals/elkhorn.py rename to infinigen/assets/corals/elkhorn.py index 966cbc631..90485844d 100644 --- a/infinigen/assets/underwater/corals/elkhorn.py +++ b/infinigen/assets/corals/elkhorn.py @@ -10,19 +10,19 @@ from mathutils import kdtree from numpy.random import uniform -from assets.corals.base import BaseCoralFactory -from assets.corals.tentacles import make_radius_points_fn -from assets.utils.decorate import displace_vertices, geo_extension, read_co, remove_vertices, \ +from infinigen.assets.corals.base import BaseCoralFactory +from infinigen.assets.corals.tentacles import make_radius_points_fn +from infinigen.assets.utils.decorate import displace_vertices, geo_extension, read_co, remove_vertices, \ separate_loose, write_co -from assets.utils.draw import make_circular_interp -from assets.utils.misc import log_uniform -from assets.utils.object import new_circle, origin2lowest -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from surfaces import surface -from util.blender import deep_clone_obj -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.utils.draw import make_circular_interp +from infinigen.assets.utils.misc import log_uniform +from infinigen.assets.utils.object import new_circle, origin2lowest +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core import surface +from infinigen.core.util.blender import deep_clone_obj +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class ElkhornBaseCoralFactory(BaseCoralFactory): tentacle_prob = 0. diff --git a/infinigen/assets/underwater/corals/fan.py b/infinigen/assets/corals/fan.py similarity index 83% rename from infinigen/assets/underwater/corals/fan.py rename to infinigen/assets/corals/fan.py index 3945cad25..403a39961 100644 --- a/infinigen/assets/underwater/corals/fan.py +++ b/infinigen/assets/corals/fan.py @@ -9,17 +9,17 @@ import numpy as np from numpy.random import uniform -import util.blender as butil -from assets.corals.base import BaseCoralFactory -from assets.utils.decorate import displace_vertices, geo_extension, read_co, subsurface2face_size, treeify -from assets.utils.draw import shape_by_angles -from assets.utils.nodegroup import geo_radius -from assets.utils.object import new_circle, origin2lowest -from assets.utils.shortest_path import geo_shortest_path -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from surfaces import surface -from assets.utils.tag import tag_object, tag_nodegroup +import infinigen.core.util.blender as butil +from infinigen.assets.corals.base import BaseCoralFactory +from infinigen.assets.utils.decorate import displace_vertices, geo_extension, read_co, subsurface2face_size, treeify +from infinigen.assets.utils.draw import shape_by_angles +from infinigen.assets.utils.nodegroup import geo_radius +from infinigen.assets.utils.object import new_circle, origin2lowest +from infinigen.assets.utils.shortest_path import geo_shortest_path +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core import surface +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class FanBaseCoralFactory(BaseCoralFactory): tentacle_prob = 0. diff --git a/infinigen/assets/underwater/corals/generate.py b/infinigen/assets/corals/generate.py similarity index 93% rename from infinigen/assets/underwater/corals/generate.py rename to infinigen/assets/corals/generate.py index 5fd77f35b..0b99dbab4 100644 --- a/infinigen/assets/underwater/corals/generate.py +++ b/infinigen/assets/corals/generate.py @@ -10,16 +10,16 @@ import numpy as np from numpy.random import uniform -import util.blender as butil -from assets.utils.misc import build_color_ramp, log_uniform +import infinigen.core.util.blender as butil +from infinigen.assets.utils.misc import build_color_ramp, log_uniform from .fan import FanBaseCoralFactory from ..utils.decorate import assign_material, join_objects -from util.math import FixedSeed -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from placement.detail import remesh_with_attrs -from placement.factory import AssetFactory -from surfaces import surface +from infinigen.core.util.math import FixedSeed +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core.placement.detail import remesh_with_attrs +from infinigen.core.placement.factory import AssetFactory +from infinigen.core import surface from .base import BaseCoralFactory from .diff_growth import DiffGrowthBaseCoralFactory, LeatherBaseCoralFactory, TableBaseCoralFactory from .laplacian import CauliflowerBaseCoralFactory @@ -30,7 +30,7 @@ from .tube import TubeBaseCoralFactory from .star import StarBaseCoralFactory from . import tentacles -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class CoralFactory(AssetFactory): diff --git a/infinigen/assets/underwater/corals/laplacian.py b/infinigen/assets/corals/laplacian.py similarity index 65% rename from infinigen/assets/underwater/corals/laplacian.py rename to infinigen/assets/corals/laplacian.py index 63fa4a07a..261e5cd96 100644 --- a/infinigen/assets/underwater/corals/laplacian.py +++ b/infinigen/assets/corals/laplacian.py @@ -4,14 +4,14 @@ # Authors: Lingjie Mei -from assets.corals.base import BaseCoralFactory -from assets.corals.tentacles import make_radius_points_fn -from assets.utils.laplacian import build_laplacian_3d -from assets.utils.object import mesh2obj -from assets.utils.decorate import geo_extension -import util.blender as butil -from surfaces import surface -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.corals.base import BaseCoralFactory +from infinigen.assets.corals.tentacles import make_radius_points_fn +from infinigen.assets.utils.laplacian import build_laplacian_3d +from infinigen.assets.utils.object import mesh2obj +from infinigen.assets.utils.decorate import geo_extension +import infinigen.core.util.blender as butil +from infinigen.core import surface +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class CauliflowerBaseCoralFactory(BaseCoralFactory): tentacle_prob = 0.4 diff --git a/infinigen/assets/underwater/corals/reaction_diffusion.py b/infinigen/assets/corals/reaction_diffusion.py similarity index 84% rename from infinigen/assets/underwater/corals/reaction_diffusion.py rename to infinigen/assets/corals/reaction_diffusion.py index b7891af1a..f966ba9bf 100644 --- a/infinigen/assets/underwater/corals/reaction_diffusion.py +++ b/infinigen/assets/corals/reaction_diffusion.py @@ -7,15 +7,15 @@ import bpy import numpy as np -from assets.corals.base import BaseCoralFactory -from assets.utils.object import center, mesh2obj, new_icosphere -from assets.utils.decorate import geo_extension -from assets.utils.mesh import build_convex_mesh -from assets.utils.reaction_diffusion import feed2kill, make_periodic_weight_fn, reaction_diffusion -import util.blender as butil -from util.math import FixedSeed -from surfaces import surface -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.corals.base import BaseCoralFactory +from infinigen.assets.utils.object import center, mesh2obj, new_icosphere +from infinigen.assets.utils.decorate import geo_extension +from infinigen.assets.utils.mesh import build_convex_mesh +from infinigen.assets.utils.reaction_diffusion import feed2kill, make_periodic_weight_fn, reaction_diffusion +import infinigen.core.util.blender as butil +from infinigen.core.util.math import FixedSeed +from infinigen.core import surface +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class ReactionDiffusionBaseCoralFactory(BaseCoralFactory): tentacle_prob = 0. diff --git a/infinigen/assets/underwater/corals/star.py b/infinigen/assets/corals/star.py similarity index 91% rename from infinigen/assets/underwater/corals/star.py rename to infinigen/assets/corals/star.py index b5badb6bc..825db8d1e 100644 --- a/infinigen/assets/underwater/corals/star.py +++ b/infinigen/assets/corals/star.py @@ -10,15 +10,15 @@ from mathutils import Vector from numpy.random import uniform -import util.blender as butil -from assets.corals.base import BaseCoralFactory -from assets.utils.decorate import displace_vertices, geo_extension, join_objects -from assets.utils.object import new_empty, new_icosphere -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from surfaces import surface -from util.blender import deep_clone_obj -from assets.utils.tag import tag_object, tag_nodegroup +import infinigen.core.util.blender as butil +from infinigen.assets.corals.base import BaseCoralFactory +from infinigen.assets.utils.decorate import displace_vertices, geo_extension, join_objects +from infinigen.assets.utils.object import new_empty, new_icosphere +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core import surface +from infinigen.core.util.blender import deep_clone_obj +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class StarBaseCoralFactory(BaseCoralFactory): tentacle_prob = 1. diff --git a/infinigen/assets/underwater/corals/tentacles.py b/infinigen/assets/corals/tentacles.py similarity index 88% rename from infinigen/assets/underwater/corals/tentacles.py rename to infinigen/assets/corals/tentacles.py index 96d20c3a3..af02c3ae6 100644 --- a/infinigen/assets/underwater/corals/tentacles.py +++ b/infinigen/assets/corals/tentacles.py @@ -8,16 +8,16 @@ import numpy as np from numpy.random import uniform -from assets.utils.misc import sample_direction -from assets.utils.decorate import assign_material -from assets.utils.nodegroup import geo_radius -from placement.factory import make_asset_collection -from nodes.node_wrangler import NodeWrangler, Nodes -from surfaces import surface -from assets.trees.tree import build_radius_tree -import util.blender as butil -from util.blender import deep_clone_obj -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.utils.misc import sample_direction +from infinigen.assets.utils.decorate import assign_material +from infinigen.assets.utils.nodegroup import geo_radius +from infinigen.core.placement.factory import make_asset_collection +from infinigen.core.nodes.node_wrangler import NodeWrangler, Nodes +from infinigen.core import surface +from infinigen.assets.trees.tree import build_radius_tree +import infinigen.core.util.blender as butil +from infinigen.core.util.blender import deep_clone_obj +from infinigen.assets.utils.tag import tag_object, tag_nodegroup def build_tentacles(**kwargs): n_branch = 5 diff --git a/infinigen/assets/underwater/corals/tree.py b/infinigen/assets/corals/tree.py similarity index 89% rename from infinigen/assets/underwater/corals/tree.py rename to infinigen/assets/corals/tree.py index 5d79d81f8..0df8febc3 100644 --- a/infinigen/assets/underwater/corals/tree.py +++ b/infinigen/assets/corals/tree.py @@ -9,17 +9,17 @@ import numpy as np from numpy.random import uniform -from assets.corals.base import BaseCoralFactory -from assets.corals.tentacles import make_radius_points_fn -from assets.utils.decorate import separate_loose -from assets.utils.object import mesh2obj, data2mesh -from assets.utils.nodegroup import geo_radius -import util.blender as butil -from placement.detail import remesh_with_attrs -from util.math import FixedSeed -from surfaces import surface -from assets.trees.tree import build_radius_tree, recursive_path, FineTreeVertices -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.corals.base import BaseCoralFactory +from infinigen.assets.corals.tentacles import make_radius_points_fn +from infinigen.assets.utils.decorate import separate_loose +from infinigen.assets.utils.object import mesh2obj, data2mesh +from infinigen.assets.utils.nodegroup import geo_radius +import infinigen.core.util.blender as butil +from infinigen.core.placement.detail import remesh_with_attrs +from infinigen.core.util.math import FixedSeed +from infinigen.core import surface +from infinigen.assets.trees.tree import build_radius_tree, recursive_path, FineTreeVertices +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class TreeBaseCoralFactory(BaseCoralFactory): default_scale = [1] * 3 diff --git a/infinigen/assets/underwater/corals/tube.py b/infinigen/assets/corals/tube.py similarity index 88% rename from infinigen/assets/underwater/corals/tube.py rename to infinigen/assets/corals/tube.py index bb2123b11..34b2aa146 100644 --- a/infinigen/assets/underwater/corals/tube.py +++ b/infinigen/assets/corals/tube.py @@ -7,14 +7,14 @@ import bpy import numpy as np -from assets.corals.base import BaseCoralFactory -from assets.corals.tentacles import make_radius_points_fn -import util.blender as butil -from assets.utils.object import new_icosphere -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from surfaces import surface -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.corals.base import BaseCoralFactory +from infinigen.assets.corals.tentacles import make_radius_points_fn +import infinigen.core.util.blender as butil +from infinigen.assets.utils.object import new_icosphere +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core import surface +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class TubeBaseCoralFactory(BaseCoralFactory): default_scale = [.7] * 3 diff --git a/infinigen/assets/creatures/__init__.py b/infinigen/assets/creatures/__init__.py index c6ad9b534..edcb80a95 100644 --- a/infinigen/assets/creatures/__init__.py +++ b/infinigen/assets/creatures/__init__.py @@ -1,8 +1,8 @@ -from .genomes.beetle import BeetleFactory, AntSwarmFactory -from .genomes.bird import BirdFactory, FlyingBirdFactory -from .genomes.carnivore import CarnivoreFactory -from .genomes.fish import FishFactory, FishSchoolFactory -from .genomes.herbivore import HerbivoreFactory -from .genomes.crustacean import CrustaceanFactory, CrabFactory, LobsterFactory, SpinyLobsterFactory -from .genomes.reptile import FrogFactory, LizardFactory, SnakeFactory, ChameleonFactory -from .genomes.beetle import BeetleFactory, AntSwarmFactory \ No newline at end of file +from .beetle import BeetleFactory, AntSwarmFactory +from .bird import BirdFactory, FlyingBirdFactory +from .carnivore import CarnivoreFactory +from .fish import FishFactory, FishSchoolFactory +from .herbivore import HerbivoreFactory +from .crustacean import CrustaceanFactory, CrabFactory, LobsterFactory, SpinyLobsterFactory +from .reptile import FrogFactory, LizardFactory, SnakeFactory +from .insects.dragonfly import DragonflyFactory diff --git a/infinigen/assets/creatures/beetle.py b/infinigen/assets/creatures/beetle.py index 8947826ab..617e3fe81 100644 --- a/infinigen/assets/creatures/beetle.py +++ b/infinigen/assets/creatures/beetle.py @@ -12,18 +12,18 @@ from numpy.random import uniform as U, normal as N, randint import gin -from assets.creatures import genome -from assets.creatures.genome import Joint -from assets.creatures import parts -from assets.creatures.creature_util import offset_center -from assets.creatures import creature, hair as creature_hair, generate as creature_gen -from assets.creatures.animation import run_cycle as creature_animation -from assets.creatures.boid_swarm import BoidSwarmFactory +from infinigen.assets.creatures.util import genome +from infinigen.assets.creatures.util.genome import Joint +from infinigen.assets.creatures import parts +from infinigen.assets.creatures.util.creature_util import offset_center +from infinigen.assets.creatures.util import creature, hair as creature_hair, joining +from infinigen.assets.creatures.util.animation import run_cycle as creature_animation +from infinigen.assets.creatures.util.boid_swarm import BoidSwarmFactory -from placement.factory import AssetFactory, make_asset_collection -from util.math import lerp, clip_gaussian, FixedSeed -import surfaces.templates.chitin -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.placement.factory import AssetFactory, make_asset_collection +from infinigen.core.util.math import lerp, clip_gaussian, FixedSeed +import infinigen.assets.materials.chitin +from infinigen.assets.utils.tag import tag_object, tag_nodegroup logger = logging.getLogger('beetle') @@ -62,7 +62,7 @@ def insect_hair_params(): def beetle_postprocessing(body_parts, extras, params): - main_template = surfaces.surface.registry.sample_registry(params['surface_registry']) + main_template = surface.registry.sample_registry(params['surface_registry']) main_template.apply(body_parts) def beetle_genome(): @@ -103,7 +103,7 @@ def beetle_genome(): parts=body, postprocess_params=dict( surface_registry=[ - (surfaces.templates.chitin, 1) + (assets.materials.chitin, 1) ], hair=insect_hair_params() ) @@ -122,7 +122,7 @@ def create_asset(self, i, hair=False, **kwargs): root, parts = creature.genome_to_creature(genome, name=f'beetle({self.factory_seed}, {i})') tag_object(root, 'beetle') offset_center(root) - joined, extras, arma, ik_targets = creature_gen.join_and_rig_parts(root, parts, genome, + joined, extras, arma, ik_targets = joining.join_and_rig_parts(root, parts, genome, rigging=(self.animation_mode is not None), postprocess_func=beetle_postprocessing, **kwargs) if self.animation_mode == 'walk_cycle': diff --git a/infinigen/assets/creatures/bird.py b/infinigen/assets/creatures/bird.py index f1f9cc4db..8c29de77d 100644 --- a/infinigen/assets/creatures/bird.py +++ b/infinigen/assets/creatures/bird.py @@ -14,31 +14,31 @@ from numpy.random import normal as N, uniform as U import gin -from assets.creatures import genome -from assets.creatures.genome import Joint -from assets.creatures import parts +from infinigen.assets.creatures.util import genome +from infinigen.assets.creatures.util.genome import Joint +from infinigen.assets.creatures import parts -from assets.creatures.creature_util import euler +from infinigen.assets.creatures.util.creature_util import euler -import surfaces.templates.basic_bsdf -import surfaces.templates.spot_sparse_attr -import surfaces.templates.reptile_brown_circle_attr -import surfaces.templates.reptile_two_color_attr -import surfaces.templates.bird +import infinigen.assets.materials.basic_bsdf +import infinigen.assets.materials.spot_sparse_attr +import infinigen.assets.materials.reptile_brown_circle_attr +import infinigen.assets.materials.reptile_two_color_attr +import infinigen.assets.materials.bird -from surfaces.templates import bone, tongue, eyeball, beak -from util.math import clip_gaussian, FixedSeed -from util.random import random_general as rg -from util import blender as butil +from infinigen.assets.materials import bone, tongue, eyeball, beak +from infinigen.core.util.math import clip_gaussian, FixedSeed +from infinigen.core.util.random import random_general as rg +from infinigen.core.util import blender as butil -from placement.factory import AssetFactory -from assets.creatures.creature_util import offset_center -from assets.creatures import creature, hair as creature_hair, generate as creature_gen -from assets.creatures.animation.driver_wiggle import animate_wiggle_bones -from assets.creatures.animation import idle, run_cycle -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.placement.factory import AssetFactory +from infinigen.assets.creatures.util.creature_util import offset_center +from infinigen.assets.creatures.util import creature, hair as creature_hair, joining +from infinigen.assets.creatures.util.animation.driver_wiggle import animate_wiggle_bones +from infinigen.assets.creatures.util.animation import idle, run_cycle +from infinigen.assets.utils.tag import tag_object, tag_nodegroup -from placement import animation_policy +from infinigen.core.placement import animation_policy def bird_hair_params(flying=True): @@ -75,7 +75,7 @@ def bird_postprocessing(body_parts, extras, params): get_extras = lambda k: [o for o in extras if k in o.name] - main_template = surfaces.surface.registry.sample_registry(params['surface_registry']) + main_template = surface.registry.sample_registry(params['surface_registry']) main_template.apply(body_parts + get_extras('BodyExtra') + get_extras('Feather')) tongue.apply(get_extras('Tongue')) @@ -150,10 +150,10 @@ def duck_genome(mode): animation=dict(), hair=bird_hair_params(flying=False), surface_registry=[ - (surfaces.templates.spot_sparse_attr, 4), - (surfaces.templates.reptile_brown_circle_attr, 0.5), - (surfaces.templates.reptile_two_color_attr, 0.5), - (surfaces.templates.bird, 5) + (assets.materials.spot_sparse_attr, 4), + (assets.materials.reptile_brown_circle_attr, 0.5), + (assets.materials.reptile_two_color_attr, 0.5), + (assets.materials.bird, 5) ] ) ) @@ -227,10 +227,10 @@ def flying_bird_genome(mode): animation=dict(), hair=bird_hair_params(flying=True), surface_registry=[ - #(surfaces.templates.spot_sparse_attr, 4), - #(surfaces.templates.reptile_brown_circle_attr, 0.5), - #(surfaces.templates.reptile_two_color_attr, 0.5), - (surfaces.templates.bird, 5) + #(assets.materials.spot_sparse_attr, 4), + #(assets.materials.reptile_brown_circle_attr, 0.5), + #(assets.materials.reptile_two_color_attr, 0.5), + (assets.materials.bird, 5) ] ) ) @@ -251,7 +251,7 @@ def create_asset(self, i, placeholder, hair=True, **kwargs): root, parts = creature.genome_to_creature(genome, name=f'bird({self.factory_seed}, {i})') tag_object(root, 'bird') offset_center(root) - joined, extras, arma, ik_targets = creature_gen.join_and_rig_parts(root, parts, genome, + joined, extras, arma, ik_targets = joining.join_and_rig_parts(root, parts, genome, rigging=dynamic, postprocess_func=bird_postprocessing, **kwargs) @@ -320,7 +320,7 @@ def create_asset(self, i, placeholder, hair=True, animate=False,**kwargs): genome = flying_bird_genome(self.animation_mode) root, parts = creature.genome_to_creature(genome, name=f'flying_bird({self.factory_seed}, {i})') - joined, extras, arma, ik_targets = creature_gen.join_and_rig_parts(root, parts, genome, + joined, extras, arma, ik_targets = joining.join_and_rig_parts(root, parts, genome, rigging=self.animation_mode is not None, postprocess_func=bird_postprocessing, **kwargs) joined_extras = butil.join_objects(extras) diff --git a/infinigen/assets/creatures/carnivore.py b/infinigen/assets/creatures/carnivore.py index 205f19eca..abd185beb 100644 --- a/infinigen/assets/creatures/carnivore.py +++ b/infinigen/assets/creatures/carnivore.py @@ -8,27 +8,27 @@ from numpy.random import uniform as U, normal as N import gin -from assets.creatures import genome -from assets.creatures.genome import Joint -from assets.creatures import parts -from util.math import clip_gaussian +from infinigen.assets.creatures.util import genome +from infinigen.assets.creatures.util.genome import Joint +from infinigen.assets.creatures import parts +from infinigen.core.util.math import clip_gaussian -import surfaces.templates.tiger_attr -import surfaces.templates.giraffe_attr -import surfaces.templates.spot_sparse_attr -from surfaces import surface +import infinigen.assets.materials.tiger_attr +import infinigen.assets.materials.giraffe_attr +import infinigen.assets.materials.spot_sparse_attr +from infinigen.core import surface -from surfaces.templates import bone, tongue, eyeball, nose +from infinigen.assets.materials import bone, tongue, eyeball, nose -from placement.factory import AssetFactory -from assets.creatures.creature_util import offset_center -from assets.creatures import creature, generate as creature_gen -from assets.creatures import hair as creature_hair, cloth_sim -from assets.creatures.animation import idle, run_cycle +from infinigen.core.placement.factory import AssetFactory +from infinigen.assets.creatures.util.creature_util import offset_center +from infinigen.assets.creatures.util import creature, joining +from infinigen.assets.creatures.util import hair as creature_hair, cloth_sim +from infinigen.assets.creatures.util.animation import idle, run_cycle -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.utils.tag import tag_object, tag_nodegroup -from util import blender as butil +from infinigen.core.util import blender as butil def tiger_hair_params(): @@ -80,7 +80,7 @@ def tiger_postprocessing(body_parts, extras, params): get_extras = lambda k: [o for o in extras if k in o.name] - main_template = surfaces.surface.registry.sample_registry(params['surface_registry']) + main_template = surface.registry.sample_registry(params['surface_registry']) main_template.apply(body_parts + get_extras('BodyExtra')) tongue.apply(get_extras('Tongue')) @@ -169,9 +169,9 @@ def tiger_genome(): hair=tiger_hair_params(), skin=tiger_skin_sim_params(), surface_registry=[ - (surfaces.templates.tiger_attr, 3), - (surfaces.templates.giraffe_attr, 0.2), - (surfaces.templates.spot_sparse_attr, 2) + (assets.materials.tiger_attr, 3), + (assets.materials.giraffe_attr, 0.2), + (assets.materials.spot_sparse_attr, 2) ] ) ) @@ -196,7 +196,7 @@ def create_asset(self, i, placeholder, hair=True, simulate=False, **kwargs): dynamic = self.animation_mode is not None - joined, extras, arma, ik_targets = creature_gen.join_and_rig_parts( + joined, extras, arma, ik_targets = joining.join_and_rig_parts( root, parts, genome, rigging=dynamic, postprocess_func=tiger_postprocessing, **kwargs) diff --git a/infinigen/assets/creatures/crustacean.py b/infinigen/assets/creatures/crustacean.py index 26e9ec0ca..fa4e2cd3d 100644 --- a/infinigen/assets/creatures/crustacean.py +++ b/infinigen/assets/creatures/crustacean.py @@ -12,24 +12,24 @@ import numpy as np from numpy.random import uniform -from assets.creatures.creature import genome_to_creature -from assets.creatures.generate import join_and_rig_parts -from assets.creatures.genome import CreatureGenome, Joint, attach, part -from assets.creatures.parts.crustacean.antenna import LobsterAntennaFactory, SpinyLobsterAntennaFactory -from assets.creatures.parts.crustacean.claw import CrabClawFactory, LobsterClawFactory -from assets.creatures.parts.crustacean.eye import CrustaceanEyeFactory -from assets.creatures.parts.crustacean.fin import CrustaceanFinFactory -from assets.creatures.parts.crustacean.leg import CrabLegFactory, LobsterLegFactory -from assets.creatures.parts.crustacean.body import CrabBodyFactory, LobsterBodyFactory -from assets.creatures.parts.crustacean.tail import CrustaceanTailFactory -from assets.utils.decorate import assign_material, read_material_index, write_material_index -from assets.utils.misc import build_color_ramp, log_uniform -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from placement.factory import AssetFactory -from surfaces.surface import read_attr_data, shaderfunc_to_material -from util import blender as butil -from util.math import FixedSeed +from infinigen.assets.creatures.util.creature import genome_to_creature +from infinigen.assets.creatures.util.joining import join_and_rig_parts +from infinigen.assets.creatures.util.genome import CreatureGenome, Joint, attach, part +from infinigen.assets.creatures.parts.crustacean.antenna import LobsterAntennaFactory, SpinyLobsterAntennaFactory +from infinigen.assets.creatures.parts.crustacean.claw import CrabClawFactory, LobsterClawFactory +from infinigen.assets.creatures.parts.crustacean.eye import CrustaceanEyeFactory +from infinigen.assets.creatures.parts.crustacean.fin import CrustaceanFinFactory +from infinigen.assets.creatures.parts.crustacean.leg import CrabLegFactory, LobsterLegFactory +from infinigen.assets.creatures.parts.crustacean.body import CrabBodyFactory, LobsterBodyFactory +from infinigen.assets.creatures.parts.crustacean.tail import CrustaceanTailFactory +from infinigen.assets.utils.decorate import assign_material, read_material_index, write_material_index +from infinigen.assets.utils.misc import build_color_ramp, log_uniform +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core.placement.factory import AssetFactory +from infinigen.core.surface import read_attr_data, shaderfunc_to_material +from infinigen.core.util import blender as butil +from infinigen.core.util.math import FixedSeed n_legs = 4 n_limbs = 5 diff --git a/infinigen/assets/creatures/fish.py b/infinigen/assets/creatures/fish.py index 57a9ab0ea..51b35ab20 100644 --- a/infinigen/assets/creatures/fish.py +++ b/infinigen/assets/creatures/fish.py @@ -13,29 +13,29 @@ import numpy as np from numpy.random import uniform as U, normal as N, randint -import surfaces.templates.scale -import surfaces.templates.fishbody -from surfaces.templates import fishfin, eyeball -from surfaces import surface -from surfaces.surface_utils import sample_range +import infinigen.assets.materials.scale +import infinigen.assets.materials.fishbody +from infinigen.assets.materials import fishfin, eyeball +from infinigen.core import surface +from infinigen.assets.materials.utils.surface_utils import sample_range -from placement.factory import AssetFactory, make_asset_collection +from infinigen.core.placement.factory import AssetFactory, make_asset_collection -from assets.creatures import genome -from assets.creatures.genome import Joint -from assets.creatures import parts -from assets.creatures import creature, generate as creature_gen -from assets.creatures import cloth_sim -from assets.creatures.boid_swarm import BoidSwarmFactory +from infinigen.assets.creatures.util import genome +from infinigen.assets.creatures.util.genome import Joint +from infinigen.assets.creatures import parts +from infinigen.assets.creatures.util import creature, joining +from infinigen.assets.creatures.util import cloth_sim +from infinigen.assets.creatures.util.boid_swarm import BoidSwarmFactory -from util import blender as butil -from util.math import clip_gaussian, FixedSeed -from assets.creatures.animation.driver_wiggle import animate_wiggle_bones -from assets.creatures.creature_util import offset_center +from infinigen.core.util import blender as butil +from infinigen.core.util.math import clip_gaussian, FixedSeed +from infinigen.assets.creatures.util.animation.driver_wiggle import animate_wiggle_bones +from infinigen.assets.creatures.util.creature_util import offset_center -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.utils.tag import tag_object, tag_nodegroup -from surfaces.templates import fish_eye_shader +from infinigen.assets.materials import fish_eye_shader def fin_params(scale=(1, 1, 1), dorsal=False): # scale = np.array((0.2, 1, 0.4)) * np.array((l / l_mean, 1, rad/r_mean)) * np.array(scale) @@ -76,7 +76,7 @@ def fin_params(scale=(1, 1, 1), dorsal=False): def fish_postprocessing(body_parts, extras, params): get_extras = lambda k: [o for o in extras if k in o.name] - main_template = surfaces.surface.registry.sample_registry(params['surface_registry']) + main_template = surface.registry.sample_registry(params['surface_registry']) main_template.apply(body_parts + get_extras('BodyExtra')) mat = body_parts[0].active_material @@ -169,8 +169,8 @@ def fish_genome(): cloth=fish_fin_cloth_sim_params(), anim=fish_swim_params(), surface_registry=[ - (surfaces.templates.fishbody, 3), - #(surfaces.templates.scale, 1), + (assets.materials.fishbody, 3), + #(assets.materials.scale, 1), ] ) ) @@ -246,7 +246,7 @@ def seeded_fish_postprocess(*args, **kwargs): with FixedSeed(self.factory_seed): fish_postprocessing(*args, **kwargs) - joined, extras, arma, ik_targets = creature_gen.join_and_rig_parts( + joined, extras, arma, ik_targets = joining.join_and_rig_parts( root, parts, instance_genome, rigging=(self.animation_mode is not None), rig_before_subdiv=True, postprocess_func=seeded_fish_postprocess, adapt_mode='subdivide', **kwargs) if self.animation_mode is not None and arma is not None: diff --git a/infinigen/assets/creatures/herbivore.py b/infinigen/assets/creatures/herbivore.py index fb2959489..116ea91c7 100644 --- a/infinigen/assets/creatures/herbivore.py +++ b/infinigen/assets/creatures/herbivore.py @@ -11,29 +11,29 @@ import numpy as np from numpy.random import uniform as U, normal as N -from assets.creatures import genome -from assets.creatures.genome import Joint -from assets.creatures import parts -from util.math import clip_gaussian +from infinigen.assets.creatures.util import genome +from infinigen.assets.creatures.util.genome import Joint +from infinigen.assets.creatures import parts +from infinigen.core.util.math import clip_gaussian -from surfaces import surface +from infinigen.core import surface -import surfaces.templates.tiger_attr -import surfaces.templates.giraffe_attr -import surfaces.templates.spot_sparse_attr -import surfaces.templates.reptile_brown_circle_attr -import surfaces.templates.reptile_gray_attr +import infinigen.assets.materials.tiger_attr +import infinigen.assets.materials.giraffe_attr +import infinigen.assets.materials.spot_sparse_attr +import infinigen.assets.materials.reptile_brown_circle_attr +import infinigen.assets.materials.reptile_gray_attr -from placement.factory import AssetFactory -from assets.creatures.creature_util import offset_center -from assets.creatures import creature, generate as creature_gen -from assets.creatures import hair as creature_hair, cloth_sim -from assets.creatures.animation import idle, run_cycle +from infinigen.core.placement.factory import AssetFactory +from infinigen.assets.creatures.util.creature_util import offset_center +from infinigen.assets.creatures.util import creature, joining +from infinigen.assets.creatures.util import hair as creature_hair, cloth_sim +from infinigen.assets.creatures.util.animation import idle, run_cycle -from surfaces.templates import bone, tongue, eyeball, nose, horn -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.materials import bone, tongue, eyeball, nose, horn +from infinigen.assets.utils.tag import tag_object, tag_nodegroup -from util import blender as butil +from infinigen.core.util import blender as butil def herbivore_hair(): @@ -71,7 +71,7 @@ def herbivore_postprocessing(body_parts, extras, params): get_extras = lambda k: [o for o in extras if k in o.name] - main_template = surfaces.surface.registry.sample_registry(params['surface_registry']) + main_template = surface.registry.sample_registry(params['surface_registry']) main_template.apply(body_parts + get_extras('BodyExtra')) tongue.apply(get_extras('Tongue')) @@ -166,14 +166,14 @@ def herbivore_genome(): if U() < 1: hair = herbivore_hair() registry = [ - (surfaces.templates.giraffe_attr, 1), - (surfaces.templates.spot_sparse_attr, 3) + (assets.materials.giraffe_attr, 1), + (assets.materials.spot_sparse_attr, 3) ] else: hair = None registry = [ - (surfaces.templates.reptile_brown_circle_attr, 1), - (surfaces.templates.reptile_gray_attr, 1) + (assets.materials.reptile_brown_circle_attr, 1), + (assets.materials.reptile_gray_attr, 1) ] return genome.CreatureGenome( @@ -209,7 +209,7 @@ def create_asset(self, i, placeholder, hair=True, simulate=False, **kwargs): dynamic = self.animation_mode is not None - joined, extras, arma, ik_targets = creature_gen.join_and_rig_parts( + joined, extras, arma, ik_targets = joining.join_and_rig_parts( root, parts, genome, rigging=dynamic, postprocess_func=herbivore_postprocessing, **kwargs) diff --git a/infinigen/assets/creatures/insects/__init__.py b/infinigen/assets/creatures/insects/__init__.py index 35615e347..e05ce4f40 100644 --- a/infinigen/assets/creatures/insects/__init__.py +++ b/infinigen/assets/creatures/insects/__init__.py @@ -1 +1 @@ -from .assembled.dragonfly import DragonflyFactory \ No newline at end of file +from .dragonfly import DragonflyFactory \ No newline at end of file diff --git a/infinigen/assets/creatures/insects/assembled/dragonfly.py b/infinigen/assets/creatures/insects/dragonfly.py similarity index 94% rename from infinigen/assets/creatures/insects/assembled/dragonfly.py rename to infinigen/assets/creatures/insects/dragonfly.py index 801953155..b5e9d0f77 100644 --- a/infinigen/assets/creatures/insects/assembled/dragonfly.py +++ b/infinigen/assets/creatures/insects/dragonfly.py @@ -10,23 +10,23 @@ import numpy as np from numpy.random import uniform as U, normal as N, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category, hsv2rgba -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category, hsv2rgba +from infinigen.core import surface -from assets.insects.utils.geom_utils import nodegroup_symmetric_clone -from assets.insects.parts.head.dragonfly_head import nodegroup_dragon_fly_head -from assets.insects.parts.body.dragonfly_body import nodegroup_dragonfly_body -from assets.insects.parts.tail.dragonfly_tail import nodegroup_dragonfly_tail -from assets.insects.parts.leg.dragonfly_leg import nodegroup_leg_control, nodegroup_dragonfly_leg -from assets.insects.parts.wing.dragonfly_wing import nodegroup_dragonfly_wing +from .utils.geom_utils import nodegroup_symmetric_clone +from .parts.head.dragonfly_head import nodegroup_dragon_fly_head +from .parts.body.dragonfly_body import nodegroup_dragonfly_body +from .parts.tail.dragonfly_tail import nodegroup_dragonfly_tail +from .parts.leg.dragonfly_leg import nodegroup_leg_control, nodegroup_dragonfly_leg +from .parts.wing.dragonfly_wing import nodegroup_dragonfly_wing -from placement import animation_policy +from infinigen.core.placement import animation_policy -from util.math import FixedSeed -from placement.factory import AssetFactory -from util import blender as butil +from infinigen.core.util.math import FixedSeed +from infinigen.core.placement.factory import AssetFactory +from infinigen.core.util import blender as butil def geometry_dragonfly(nw: NodeWrangler, **kwargs): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/creatures/insects/parts/antenna/dragonfly_antenna.py b/infinigen/assets/creatures/insects/parts/antenna/dragonfly_antenna.py index 9bc22bba3..5a98e3114 100644 --- a/infinigen/assets/creatures/insects/parts/antenna/dragonfly_antenna.py +++ b/infinigen/assets/creatures/insects/parts/antenna/dragonfly_antenna.py @@ -7,12 +7,12 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.insects.utils.geom_utils import nodegroup_simple_tube_v2 +from infinigen.assets.creatures.insects.utils.geom_utils import nodegroup_simple_tube_v2 @node_utils.to_nodegroup('nodegroup_dragonfly_antenna', singleton=False, type='GeometryNodeTree') def nodegroup_dragonfly_antenna(nw: NodeWrangler): diff --git a/infinigen/assets/creatures/insects/parts/body/dragonfly_body.py b/infinigen/assets/creatures/insects/parts/body/dragonfly_body.py index a40dff84d..e0e0678a2 100644 --- a/infinigen/assets/creatures/insects/parts/body/dragonfly_body.py +++ b/infinigen/assets/creatures/insects/parts/body/dragonfly_body.py @@ -7,14 +7,14 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.insects.utils.geom_utils import nodegroup_circle_cross_section, nodegroup_surface_bump, nodegroup_random_rotation_scale, nodegroup_instance_on_points -from assets.insects.parts.hair.principled_hair import nodegroup_principled_hair -from assets.insects.utils.shader_utils import shader_black_w_noise_shader, nodegroup_add_noise, nodegroup_color_noise +from infinigen.assets.creatures.insects.utils.geom_utils import nodegroup_circle_cross_section, nodegroup_surface_bump, nodegroup_random_rotation_scale, nodegroup_instance_on_points +from infinigen.assets.creatures.insects.parts.hair.principled_hair import nodegroup_principled_hair +from infinigen.assets.creatures.insects.utils.shader_utils import shader_black_w_noise_shader, nodegroup_add_noise, nodegroup_color_noise def shader_dragonfly_body_shader(nw: NodeWrangler, base_color, v): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/creatures/insects/parts/eye/dragonfly_eye.py b/infinigen/assets/creatures/insects/parts/eye/dragonfly_eye.py index e6faedacb..bc0750e13 100644 --- a/infinigen/assets/creatures/insects/parts/eye/dragonfly_eye.py +++ b/infinigen/assets/creatures/insects/parts/eye/dragonfly_eye.py @@ -7,12 +7,12 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.insects.utils.shader_utils import nodegroup_color_noise +from infinigen.assets.creatures.insects.utils.shader_utils import nodegroup_color_noise def shader_dragonfly_eye_shader(nw: NodeWrangler, base_color, v): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/creatures/insects/parts/hair/principled_hair.py b/infinigen/assets/creatures/insects/parts/hair/principled_hair.py index 33e5ff792..0b219d7a7 100644 --- a/infinigen/assets/creatures/insects/parts/hair/principled_hair.py +++ b/infinigen/assets/creatures/insects/parts/hair/principled_hair.py @@ -7,12 +7,12 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.insects.utils.geom_utils import nodegroup_shape_quadratic, nodegroup_circle_cross_section +from infinigen.assets.creatures.insects.utils.geom_utils import nodegroup_shape_quadratic, nodegroup_circle_cross_section @node_utils.to_nodegroup('nodegroup_principled_hair', singleton=False, type='GeometryNodeTree') def nodegroup_principled_hair(nw: NodeWrangler): diff --git a/infinigen/assets/creatures/insects/parts/head/dragonfly_head.py b/infinigen/assets/creatures/insects/parts/head/dragonfly_head.py index 556778c2b..abf0a82eb 100644 --- a/infinigen/assets/creatures/insects/parts/head/dragonfly_head.py +++ b/infinigen/assets/creatures/insects/parts/head/dragonfly_head.py @@ -7,17 +7,17 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.insects.utils.geom_utils import nodegroup_add_hair, nodegroup_attach_part, nodegroup_symmetric_clone, nodegroup_surface_bump -from assets.insects.parts.mouth.dragonfly_mouth import nodegroup_dragonfly_mouth -from assets.insects.parts.eye.dragonfly_eye import nodegroup_dragonfly_eye -from assets.insects.parts.antenna.dragonfly_antenna import nodegroup_dragonfly_antenna -from assets.insects.parts.hair.principled_hair import nodegroup_principled_hair -from assets.insects.utils.shader_utils import nodegroup_color_noise, shader_black_w_noise_shader +from infinigen.assets.creatures.insects.utils.geom_utils import nodegroup_add_hair, nodegroup_attach_part, nodegroup_symmetric_clone, nodegroup_surface_bump +from infinigen.assets.creatures.insects.parts.mouth.dragonfly_mouth import nodegroup_dragonfly_mouth +from infinigen.assets.creatures.insects.parts.eye.dragonfly_eye import nodegroup_dragonfly_eye +from infinigen.assets.creatures.insects.parts.antenna.dragonfly_antenna import nodegroup_dragonfly_antenna +from infinigen.assets.creatures.insects.parts.hair.principled_hair import nodegroup_principled_hair +from infinigen.assets.creatures.insects.utils.shader_utils import nodegroup_color_noise, shader_black_w_noise_shader def shader_dragonfly_head_shader(nw: NodeWrangler, base_color, v): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/creatures/insects/parts/leg/dragonfly_leg.py b/infinigen/assets/creatures/insects/parts/leg/dragonfly_leg.py index ad08251fb..6f76c5279 100644 --- a/infinigen/assets/creatures/insects/parts/leg/dragonfly_leg.py +++ b/infinigen/assets/creatures/insects/parts/leg/dragonfly_leg.py @@ -7,14 +7,14 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.insects.utils.shader_utils import shader_black_w_noise_shader -from assets.insects.utils.geom_utils import nodegroup_shape_quadratic, nodegroup_surface_bump -from assets.insects.parts.hair.principled_hair import nodegroup_principled_hair +from infinigen.assets.creatures.insects.utils.shader_utils import shader_black_w_noise_shader +from infinigen.assets.creatures.insects.utils.geom_utils import nodegroup_shape_quadratic, nodegroup_surface_bump +from infinigen.assets.creatures.insects.parts.hair.principled_hair import nodegroup_principled_hair @node_utils.to_nodegroup('nodegroup_leg_control', singleton=False, type='GeometryNodeTree') def nodegroup_leg_control(nw: NodeWrangler): diff --git a/infinigen/assets/creatures/insects/parts/mouth/dragonfly_mouth.py b/infinigen/assets/creatures/insects/parts/mouth/dragonfly_mouth.py index 02c322be6..fa174e2a9 100644 --- a/infinigen/assets/creatures/insects/parts/mouth/dragonfly_mouth.py +++ b/infinigen/assets/creatures/insects/parts/mouth/dragonfly_mouth.py @@ -7,12 +7,12 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.insects.utils.geom_utils import nodegroup_simple_tube_v2 +from infinigen.assets.creatures.insects.utils.geom_utils import nodegroup_simple_tube_v2 @node_utils.to_nodegroup('nodegroup_dragonfly_mouth', singleton=False, type='GeometryNodeTree') def nodegroup_dragonfly_mouth(nw: NodeWrangler): diff --git a/infinigen/assets/creatures/insects/parts/tail/dragonfly_tail.py b/infinigen/assets/creatures/insects/parts/tail/dragonfly_tail.py index f5ad1f92b..151bde3e0 100644 --- a/infinigen/assets/creatures/insects/parts/tail/dragonfly_tail.py +++ b/infinigen/assets/creatures/insects/parts/tail/dragonfly_tail.py @@ -7,13 +7,13 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.insects.utils.shader_utils import nodegroup_color_noise, nodegroup_add_noise -from assets.insects.utils.geom_utils import nodegroup_random_rotation_scale, nodegroup_circle_cross_section, nodegroup_shape_quadratic, nodegroup_surface_bump, nodegroup_instance_on_points +from infinigen.assets.creatures.insects.utils.shader_utils import nodegroup_color_noise, nodegroup_add_noise +from infinigen.assets.creatures.insects.utils.geom_utils import nodegroup_random_rotation_scale, nodegroup_circle_cross_section, nodegroup_shape_quadratic, nodegroup_surface_bump, nodegroup_instance_on_points def shader_dragonfly_tail_shader(nw: NodeWrangler, base_color, v, ring_length): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/creatures/insects/parts/wing/dragonfly_wing.py b/infinigen/assets/creatures/insects/parts/wing/dragonfly_wing.py index 472198d65..43b14b206 100644 --- a/infinigen/assets/creatures/insects/parts/wing/dragonfly_wing.py +++ b/infinigen/assets/creatures/insects/parts/wing/dragonfly_wing.py @@ -7,12 +7,12 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.insects.utils.shader_utils import nodegroup_add_noise +from infinigen.assets.creatures.insects.utils.shader_utils import nodegroup_add_noise @node_utils.to_nodegroup('nodegroup_dragonfly_wing', singleton=False, type='GeometryNodeTree') def nodegroup_dragonfly_wing(nw: NodeWrangler): diff --git a/infinigen/assets/creatures/insects/utils/geom_utils.py b/infinigen/assets/creatures/insects/utils/geom_utils.py index de631ac0f..5673d863f 100644 --- a/infinigen/assets/creatures/insects/utils/geom_utils.py +++ b/infinigen/assets/creatures/insects/utils/geom_utils.py @@ -7,10 +7,10 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface @node_utils.to_nodegroup('nodegroup_symmetric_clone', singleton=False, type='GeometryNodeTree') def nodegroup_symmetric_clone(nw: NodeWrangler): diff --git a/infinigen/assets/creatures/insects/utils/shader_utils.py b/infinigen/assets/creatures/insects/utils/shader_utils.py index 1bca13577..88d723661 100644 --- a/infinigen/assets/creatures/insects/utils/shader_utils.py +++ b/infinigen/assets/creatures/insects/utils/shader_utils.py @@ -7,10 +7,10 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface def shader_black_w_noise_shader(nw: NodeWrangler): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/creatures/jellyfish.py b/infinigen/assets/creatures/jellyfish.py index 75b19f9bd..8b39e5bdb 100644 --- a/infinigen/assets/creatures/jellyfish.py +++ b/infinigen/assets/creatures/jellyfish.py @@ -13,22 +13,22 @@ from numpy.random import uniform from scipy.interpolate import interp1d -import util.blender as butil -from assets.creatures.animation.driver_repeated import repeated_driver -from assets.utils.nodegroup import geo_base_selection -from assets.utils.object import data2mesh, mesh2obj, new_circle, new_empty, new_icosphere, origin2highest -from assets.utils.decorate import assign_material, geo_extension, join_objects, read_co, remove_vertices, \ +import infinigen.core.util.blender as butil +from infinigen.assets.creatures.util.animation.driver_repeated import repeated_driver +from infinigen.assets.utils.nodegroup import geo_base_selection +from infinigen.assets.utils.object import data2mesh, mesh2obj, new_circle, new_empty, new_icosphere, origin2highest +from infinigen.assets.utils.decorate import assign_material, geo_extension, join_objects, read_co, remove_vertices, \ subsurface2face_size, write_attribute -from assets.utils.misc import log_uniform -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from placement.factory import AssetFactory -from surfaces import surface -from surfaces.surface import read_attr_data, shaderfunc_to_material, write_attr_data - -from util.blender import deep_clone_obj -from util.math import FixedSeed -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.utils.misc import log_uniform +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core.placement.factory import AssetFactory +from infinigen.core import surface +from infinigen.core.surface import read_attr_data, shaderfunc_to_material, write_attr_data + +from infinigen.core.util.blender import deep_clone_obj +from infinigen.core.util.math import FixedSeed +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class JellyfishFactory(AssetFactory): diff --git a/infinigen/assets/creatures/parts/beak.py b/infinigen/assets/creatures/parts/beak.py index fd1e3890f..da77a65da 100644 --- a/infinigen/assets/creatures/parts/beak.py +++ b/infinigen/assets/creatures/parts/beak.py @@ -8,13 +8,13 @@ import numpy as np from math import sin, cos, pi, exp -from assets.creatures.creature import PartFactory, Part -from assets.creatures.genome import Joint, IKParams -from assets.creatures.util import part_util -from util import blender as butil +from infinigen.assets.creatures.util.creature import PartFactory, Part +from infinigen.assets.creatures.util.genome import Joint, IKParams +from infinigen.assets.creatures.util import part_util +from infinigen.core.util import blender as butil -from assets.creatures.geometry import nurbs as nurbs_util -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.creatures.util.geometry import nurbs as nurbs_util +from infinigen.assets.utils.tag import tag_object, tag_nodegroup def square(x): return x * x diff --git a/infinigen/assets/creatures/parts/body.py b/infinigen/assets/creatures/parts/body.py index c8a7e78c2..c8cd5d039 100644 --- a/infinigen/assets/creatures/parts/body.py +++ b/infinigen/assets/creatures/parts/body.py @@ -7,21 +7,21 @@ import numpy as np from numpy.random import normal as N, uniform -from assets.creatures import creature_util as cutil -from assets.creatures.creature import Part, PartFactory -from assets.creatures.geometry import nurbs +from infinigen.assets.creatures.util import creature_util as cutil +from infinigen.assets.creatures.util.creature import Part, PartFactory +from infinigen.assets.creatures.util.geometry import nurbs -from nodes import node_utils -from nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler -from assets.creatures.genome import Joint, IKParams -from assets.creatures.nodegroups.curve import nodegroup_polar_bezier, nodegroup_simple_tube_v2 -from assets.creatures.nodegroups.geometry import nodegroup_symmetric_clone -from assets.creatures.nodegroups.attach import nodegroup_surface_muscle +from infinigen.assets.creatures.util.genome import Joint, IKParams +from infinigen.assets.creatures.util.nodegroups.curve import nodegroup_polar_bezier, nodegroup_simple_tube_v2 +from infinigen.assets.creatures.util.nodegroups.geometry import nodegroup_symmetric_clone +from infinigen.assets.creatures.util.nodegroups.attach import nodegroup_surface_muscle -from assets.creatures.util import part_util -from assets.creatures.geometry import lofting, nurbs -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.creatures.util import part_util +from infinigen.assets.creatures.util.geometry import lofting, nurbs +from infinigen.assets.utils.tag import tag_object, tag_nodegroup @node_utils.to_nodegroup('nodegroup_quadruped_body', singleton=False, type='GeometryNodeTree') def nodegroup_quadruped_body(nw: NodeWrangler): diff --git a/infinigen/assets/creatures/parts/chameleon.py b/infinigen/assets/creatures/parts/chameleon.py index 443374a04..4ebe8f924 100644 --- a/infinigen/assets/creatures/parts/chameleon.py +++ b/infinigen/assets/creatures/parts/chameleon.py @@ -8,20 +8,20 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface - -from assets.creatures.creature import PartFactory, Part -from assets.creatures.genome import Joint, IKParams -from assets.creatures.util import part_util -from util import blender as butil +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface + +from infinigen.assets.creatures.util.creature import PartFactory, Part +from infinigen.assets.creatures.util.genome import Joint, IKParams +from infinigen.assets.creatures.util import part_util +from infinigen.core.util import blender as butil from scipy.interpolate import interp1d -from assets.creatures.util.part_util import nodegroup_to_part +from infinigen.assets.creatures.util.part_util import nodegroup_to_part -from assets.creatures.geometry import nurbs as nurbs_util -from surfaces import surface +from infinigen.assets.creatures.util.geometry import nurbs as nurbs_util +from infinigen.core import surface import logging import numpy as np diff --git a/infinigen/assets/creatures/parts/crustacean/antenna.py b/infinigen/assets/creatures/parts/crustacean/antenna.py index 523ad93b3..6e0efce51 100644 --- a/infinigen/assets/creatures/parts/crustacean/antenna.py +++ b/infinigen/assets/creatures/parts/crustacean/antenna.py @@ -7,12 +7,12 @@ import numpy as np from numpy.random import uniform -from assets.creatures.animation.driver_repeated import bend_bones_lerp -from assets.creatures.creature import Part -from assets.creatures.genome import Joint -from assets.creatures.parts.crustacean.leg import CrabLegFactory -from assets.utils.decorate import displace_vertices, join_objects -from assets.utils.misc import log_uniform +from infinigen.assets.creatures.util.animation.driver_repeated import bend_bones_lerp +from infinigen.assets.creatures.util.creature import Part +from infinigen.assets.creatures.util.genome import Joint +from infinigen.assets.creatures.parts.crustacean.leg import CrabLegFactory +from infinigen.assets.utils.decorate import displace_vertices, join_objects +from infinigen.assets.utils.misc import log_uniform class LobsterAntennaFactory(CrabLegFactory): diff --git a/infinigen/assets/creatures/parts/crustacean/body.py b/infinigen/assets/creatures/parts/crustacean/body.py index 20b0df914..2acab889e 100644 --- a/infinigen/assets/creatures/parts/crustacean/body.py +++ b/infinigen/assets/creatures/parts/crustacean/body.py @@ -8,17 +8,17 @@ from numpy.random import uniform from scipy.interpolate import interp1d -from assets.creatures.creature import Part, PartFactory -from assets.creatures.parts.utils.draw import geo_symmetric_texture -from assets.utils.decorate import add_distance_to_boundary, displace_vertices, join_objects, read_co -from assets.utils.draw import leaf, spin -from assets.utils.misc import log_uniform -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from placement.placement import placeholder_locs -from surfaces import surface -from surfaces.surface import write_attr_data -from util import blender as butil +from infinigen.assets.creatures.util.creature import Part, PartFactory +from infinigen.assets.creatures.parts.utils.draw import geo_symmetric_texture +from infinigen.assets.utils.decorate import add_distance_to_boundary, displace_vertices, join_objects, read_co +from infinigen.assets.utils.draw import leaf, spin +from infinigen.assets.utils.misc import log_uniform +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core.placement.placement import placeholder_locs +from infinigen.core import surface +from infinigen.core.surface import write_attr_data +from infinigen.core.util import blender as butil class CrabBodyFactory(PartFactory): diff --git a/infinigen/assets/creatures/parts/crustacean/claw.py b/infinigen/assets/creatures/parts/crustacean/claw.py index 784df8eea..7b5d1199e 100644 --- a/infinigen/assets/creatures/parts/crustacean/claw.py +++ b/infinigen/assets/creatures/parts/crustacean/claw.py @@ -8,20 +8,20 @@ from numpy.random import uniform from scipy.interpolate import interp1d -from assets.creatures.animation.driver_repeated import bend_bones_lerp -from assets.creatures.creature import Part -from assets.creatures.genome import Joint -from assets.creatures.parts.crustacean.leg import CrabLegFactory -from assets.creatures.parts.utils.draw import decorate_segment -from assets.utils.decorate import displace_vertices, join_objects, read_co, remove_vertices -from assets.utils.draw import spin -from assets.utils.misc import log_uniform -from assets.utils.nodegroup import geo_base_selection -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from surfaces import surface -from surfaces.surface import write_attr_data -from util import blender as butil +from infinigen.assets.creatures.util.animation.driver_repeated import bend_bones_lerp +from infinigen.assets.creatures.util.creature import Part +from infinigen.assets.creatures.util.genome import Joint +from infinigen.assets.creatures.parts.crustacean.leg import CrabLegFactory +from infinigen.assets.creatures.parts.utils.draw import decorate_segment +from infinigen.assets.utils.decorate import displace_vertices, join_objects, read_co, remove_vertices +from infinigen.assets.utils.draw import spin +from infinigen.assets.utils.misc import log_uniform +from infinigen.assets.utils.nodegroup import geo_base_selection +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core import surface +from infinigen.core.surface import write_attr_data +from infinigen.core.util import blender as butil class CrabClawFactory(CrabLegFactory): diff --git a/infinigen/assets/creatures/parts/crustacean/eye.py b/infinigen/assets/creatures/parts/crustacean/eye.py index 8f0a8836f..47a557bc4 100644 --- a/infinigen/assets/creatures/parts/crustacean/eye.py +++ b/infinigen/assets/creatures/parts/crustacean/eye.py @@ -8,10 +8,10 @@ import numpy as np from numpy.random import uniform -from assets.creatures.creature import Part, PartFactory -from assets.utils.decorate import join_objects -from assets.utils.object import new_icosphere, origin2leftmost -from placement.detail import remesh_with_attrs +from infinigen.assets.creatures.util.creature import Part, PartFactory +from infinigen.assets.utils.decorate import join_objects +from infinigen.assets.utils.object import new_icosphere, origin2leftmost +from infinigen.core.placement.detail import remesh_with_attrs class CrustaceanEyeFactory(PartFactory): diff --git a/infinigen/assets/creatures/parts/crustacean/fin.py b/infinigen/assets/creatures/parts/crustacean/fin.py index 7613fd40c..f4bb48e7c 100644 --- a/infinigen/assets/creatures/parts/crustacean/fin.py +++ b/infinigen/assets/creatures/parts/crustacean/fin.py @@ -7,10 +7,10 @@ import numpy as np from numpy.random import uniform -from assets.creatures.creature import Part, PartFactory -from assets.utils.draw import leaf -from surfaces.surface import write_attr_data -from util import blender as butil +from infinigen.assets.creatures.util.creature import Part, PartFactory +from infinigen.assets.utils.draw import leaf +from infinigen.core.surface import write_attr_data +from infinigen.core.util import blender as butil class CrustaceanFinFactory(PartFactory): diff --git a/infinigen/assets/creatures/parts/crustacean/leg.py b/infinigen/assets/creatures/parts/crustacean/leg.py index 91f06a61c..8208a834d 100644 --- a/infinigen/assets/creatures/parts/crustacean/leg.py +++ b/infinigen/assets/creatures/parts/crustacean/leg.py @@ -7,13 +7,13 @@ import numpy as np from numpy.random import uniform -from assets.creatures.animation.driver_repeated import bend_bones_lerp -from assets.creatures.creature import Part, PartFactory -from assets.creatures.genome import Joint -from assets.creatures.parts.utils.draw import make_segments -from assets.utils.decorate import join_objects, read_co -from assets.utils.misc import log_uniform -from surfaces.surface import write_attr_data +from infinigen.assets.creatures.util.animation.driver_repeated import bend_bones_lerp +from infinigen.assets.creatures.util.creature import Part, PartFactory +from infinigen.assets.creatures.util.genome import Joint +from infinigen.assets.creatures.parts.utils.draw import make_segments +from infinigen.assets.utils.decorate import join_objects, read_co +from infinigen.assets.utils.misc import log_uniform +from infinigen.core.surface import write_attr_data class CrabLegFactory(PartFactory): diff --git a/infinigen/assets/creatures/parts/crustacean/tail.py b/infinigen/assets/creatures/parts/crustacean/tail.py index 0ca29898b..f6fa88cae 100644 --- a/infinigen/assets/creatures/parts/crustacean/tail.py +++ b/infinigen/assets/creatures/parts/crustacean/tail.py @@ -8,13 +8,13 @@ from numpy.random import uniform from scipy.interpolate import interp1d -from assets.creatures.animation.driver_repeated import bend_bones_lerp -from assets.creatures.creature import Part, PartFactory -from assets.creatures.genome import Joint -from assets.creatures.parts.utils.draw import make_segments -from assets.utils.decorate import join_objects, read_co -from assets.utils.misc import log_uniform -from surfaces.surface import write_attr_data +from infinigen.assets.creatures.util.animation.driver_repeated import bend_bones_lerp +from infinigen.assets.creatures.util.creature import Part, PartFactory +from infinigen.assets.creatures.util.genome import Joint +from infinigen.assets.creatures.parts.utils.draw import make_segments +from infinigen.assets.utils.decorate import join_objects, read_co +from infinigen.assets.utils.misc import log_uniform +from infinigen.core.surface import write_attr_data class CrustaceanTailFactory(PartFactory): diff --git a/infinigen/assets/creatures/parts/eye.py b/infinigen/assets/creatures/parts/eye.py index e1c5303d7..4536fc11d 100644 --- a/infinigen/assets/creatures/parts/eye.py +++ b/infinigen/assets/creatures/parts/eye.py @@ -10,20 +10,20 @@ import numpy as np from numpy.random import uniform, normal as N, randint -from util.math import clip_gaussian -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface -from surfaces.surface_utils import nodegroup_norm_value, nodegroup_norm_vec +from infinigen.core.util.math import clip_gaussian +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface +from infinigen.assets.materials.utils.surface_utils import nodegroup_norm_value, nodegroup_norm_vec -from assets.creatures.nodegroups.curve import nodegroup_simple_tube, nodegroup_warped_circle_curve, nodegroup_smooth_taper, nodegroup_profile_part -from assets.creatures.nodegroups.math import nodegroup_aspect_to_dim +from infinigen.assets.creatures.util.nodegroups.curve import nodegroup_simple_tube, nodegroup_warped_circle_curve, nodegroup_smooth_taper, nodegroup_profile_part +from infinigen.assets.creatures.util.nodegroups.math import nodegroup_aspect_to_dim -from assets.creatures.creature import PartFactory -from assets.creatures.util import part_util -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.creatures.util.creature import PartFactory +from infinigen.assets.creatures.util import part_util +from infinigen.assets.utils.tag import tag_object, tag_nodegroup @node_utils.to_nodegroup('nodegroup_eyelid', singleton=True, type='GeometryNodeTree') def nodegroup_eyelid(nw: NodeWrangler): diff --git a/infinigen/assets/creatures/parts/eye_new.py b/infinigen/assets/creatures/parts/eye_new.py index cabf01960..bd0a30552 100644 --- a/infinigen/assets/creatures/parts/eye_new.py +++ b/infinigen/assets/creatures/parts/eye_new.py @@ -8,17 +8,17 @@ import os, sys import numpy as np import math as ma -from surfaces.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise +from infinigen.assets.materials.utils.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise import bpy import mathutils from numpy.random import uniform as U, normal as N, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.creatures.creature import PartFactory -from assets.creatures.util import part_util +from infinigen.assets.creatures.util.creature import PartFactory +from infinigen.assets.creatures.util import part_util @node_utils.to_nodegroup('nodegroup_circle', singleton=False, type='GeometryNodeTree') def nodegroup_circle(nw: NodeWrangler): diff --git a/infinigen/assets/creatures/parts/fin_old.py b/infinigen/assets/creatures/parts/fin_old.py index 410a3202a..28913c1a1 100644 --- a/infinigen/assets/creatures/parts/fin_old.py +++ b/infinigen/assets/creatures/parts/fin_old.py @@ -9,17 +9,17 @@ import numpy as np from numpy.random import uniform, normal -from assets.creatures.genome import Joint, IKParams +from infinigen.assets.creatures.util.genome import Joint, IKParams -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from assets.creatures.nodegroups.curve import nodegroup_simple_tube_v2 -from assets.creatures.nodegroups.attach import nodegroup_attach_part +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.assets.creatures.util.nodegroups.curve import nodegroup_simple_tube_v2 +from infinigen.assets.creatures.util.nodegroups.attach import nodegroup_attach_part -from assets.creatures.creature import PartFactory -from assets.creatures.util.part_util import nodegroup_to_part -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.creatures.util.creature import PartFactory +from infinigen.assets.creatures.util.part_util import nodegroup_to_part +from infinigen.assets.utils.tag import tag_object, tag_nodegroup @node_utils.to_nodegroup('nodegroup_fish_fin', singleton=False, type='GeometryNodeTree') def nodegroup_fish_fin(nw: NodeWrangler): diff --git a/infinigen/assets/creatures/parts/foot.py b/infinigen/assets/creatures/parts/foot.py index 8bb00b22f..e5df80357 100644 --- a/infinigen/assets/creatures/parts/foot.py +++ b/infinigen/assets/creatures/parts/foot.py @@ -9,17 +9,17 @@ import numpy as np from numpy.random import uniform, normal as N -from assets.creatures.genome import Joint, IKParams +from infinigen.assets.creatures.util.genome import Joint, IKParams -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from assets.creatures.nodegroups.curve import nodegroup_simple_tube, nodegroup_simple_tube_v2 -from assets.creatures.nodegroups.attach import nodegroup_surface_muscle, nodegroup_attach_part -from assets.creatures.nodegroups.math import nodegroup_deg2_rad +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.assets.creatures.util.nodegroups.curve import nodegroup_simple_tube, nodegroup_simple_tube_v2 +from infinigen.assets.creatures.util.nodegroups.attach import nodegroup_surface_muscle, nodegroup_attach_part +from infinigen.assets.creatures.util.nodegroups.math import nodegroup_deg2_rad -from assets.creatures.creature import Part, PartFactory -from assets.creatures.util.part_util import nodegroup_to_part -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.creatures.util.creature import Part, PartFactory +from infinigen.assets.creatures.util.part_util import nodegroup_to_part +from infinigen.assets.utils.tag import tag_object, tag_nodegroup @node_utils.to_nodegroup('nodegroup_tiger_toe', singleton=False, type='GeometryNodeTree') def nodegroup_tiger_toe(nw: NodeWrangler): diff --git a/infinigen/assets/creatures/parts/generic_nurbs.py b/infinigen/assets/creatures/parts/generic_nurbs.py index 9e25d0b55..b3a08abab 100644 --- a/infinigen/assets/creatures/parts/generic_nurbs.py +++ b/infinigen/assets/creatures/parts/generic_nurbs.py @@ -9,23 +9,20 @@ import bpy from pathlib import Path import numpy as np +from infinigen.assets.creatures.util.creature import Part, PartFactory -from assets.creatures import creature_util as cutil -from assets.creatures.creature import Part, PartFactory -from assets.creatures.geometry import nurbs +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.assets.creatures.util.genome import Joint, IKParams +from infinigen.assets.creatures.util import part_util +from infinigen.assets.creatures.util.geometry import lofting -from assets.creatures.genome import Joint, IKParams -from assets.creatures.util import part_util -from assets.creatures.geometry import lofting, nurbs +from infinigen.core.util import blender as butil +from infinigen.core.util.logging import Suppress +from infinigen.assets.utils.tag import tag_object, tag_nodegroup -from util import blender as butil -from util.logging import Suppress -from assets.utils.tag import tag_object, tag_nodegroup - -NURBS_BASE_PATH = Path('assets/creatures/genomes/nurbs/') +NURBS_BASE_PATH = Path('infinigen/assets/creatures/parts/nurbs_data/') load_nurbs = lambda p: np.load(p)[..., :3] # strip W coordinate if present ALL_NURBS = {p.stem: load_nurbs(p) for p in NURBS_BASE_PATH.iterdir()} diff --git a/infinigen/assets/creatures/parts/head.py b/infinigen/assets/creatures/parts/head.py index eb535581a..e6f17d518 100644 --- a/infinigen/assets/creatures/parts/head.py +++ b/infinigen/assets/creatures/parts/head.py @@ -7,25 +7,23 @@ import bpy import numpy as np from numpy.random import uniform, normal as N, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface - -from util.math import clip_gaussian -from assets.creatures import creature_util as cutil - -from assets.creatures.genome import Joint, IKParams - -from assets.creatures.nodegroups.curve import nodegroup_simple_tube, nodegroup_polar_bezier, nodegroup_simple_tube_v2, nodegroup_warped_circle_curve -from assets.creatures.nodegroups.attach import nodegroup_surface_muscle, nodegroup_part_surface_simple, nodegroup_attach_part, nodegroup_smooth_taper, nodegroup_profile_part -from assets.creatures.nodegroups.geometry import nodegroup_solidify, nodegroup_symmetric_clone -from assets.creatures.nodegroups.math import nodegroup_deg2_rad - -from assets.creatures.creature import PartFactory -from assets.creatures.util import part_util -from assets.creatures.parts.eye import nodegroup_mammal_eye -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface + +from infinigen.core.util.math import clip_gaussian +from infinigen.assets.creatures.util.genome import Joint, IKParams + +from infinigen.assets.creatures.util.nodegroups.curve import nodegroup_simple_tube, nodegroup_polar_bezier, nodegroup_simple_tube_v2, nodegroup_warped_circle_curve +from infinigen.assets.creatures.util.nodegroups.attach import nodegroup_surface_muscle, nodegroup_part_surface_simple, nodegroup_attach_part, nodegroup_smooth_taper, nodegroup_profile_part +from infinigen.assets.creatures.util.nodegroups.geometry import nodegroup_solidify, nodegroup_symmetric_clone +from infinigen.assets.creatures.util.nodegroups.math import nodegroup_deg2_rad + +from infinigen.assets.creatures.util.creature import PartFactory +from infinigen.assets.creatures.util import part_util +from infinigen.assets.creatures.parts.eye import nodegroup_mammal_eye +from infinigen.assets.utils.tag import tag_object, tag_nodegroup @node_utils.to_nodegroup('nodegroup_carnivore_jaw', singleton=True, type='GeometryNodeTree') def nodegroup_carnivore_jaw(nw: NodeWrangler): diff --git a/infinigen/assets/creatures/parts/head_detail.py b/infinigen/assets/creatures/parts/head_detail.py index 81166eed8..b342d7d6d 100644 --- a/infinigen/assets/creatures/parts/head_detail.py +++ b/infinigen/assets/creatures/parts/head_detail.py @@ -10,18 +10,18 @@ import numpy as np from numpy.random import normal as N, uniform as U -from assets.creatures.creature import PartFactory -from assets.creatures.genome import Joint, IKParams -from assets.creatures.util.part_util import nodegroup_to_part - -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from assets.creatures.nodegroups.curve import nodegroup_polar_bezier, nodegroup_simple_tube_v2 -from assets.creatures.nodegroups.attach import nodegroup_surface_muscle -from assets.creatures.nodegroups.geometry import nodegroup_solidify, nodegroup_symmetric_clone, nodegroup_taper -from util.math import clip_gaussian -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.creatures.util.creature import PartFactory +from infinigen.assets.creatures.util.genome import Joint, IKParams +from infinigen.assets.creatures.util.part_util import nodegroup_to_part + +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.assets.creatures.util.nodegroups.curve import nodegroup_polar_bezier, nodegroup_simple_tube_v2 +from infinigen.assets.creatures.util.nodegroups.attach import nodegroup_surface_muscle +from infinigen.assets.creatures.util.nodegroups.geometry import nodegroup_solidify, nodegroup_symmetric_clone, nodegroup_taper +from infinigen.core.util.math import clip_gaussian +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup @node_utils.to_nodegroup('nodegroup_cat_ear', singleton=False, type='GeometryNodeTree') def nodegroup_cat_ear(nw: NodeWrangler): diff --git a/infinigen/assets/creatures/parts/hoof.py b/infinigen/assets/creatures/parts/hoof.py index 8320c0c77..16b379883 100644 --- a/infinigen/assets/creatures/parts/hoof.py +++ b/infinigen/assets/creatures/parts/hoof.py @@ -12,20 +12,20 @@ from math import sin, cos, pi, exp from numpy.random import uniform as U, normal as N -from assets.creatures.creature import PartFactory, Part -from assets.creatures.genome import Joint, IKParams -from assets.creatures.util import part_util -from util import blender as butil +from infinigen.assets.creatures.util.creature import PartFactory, Part +from infinigen.assets.creatures.util.genome import Joint, IKParams +from infinigen.assets.creatures.util import part_util +from infinigen.core.util import blender as butil -from assets.creatures.nodegroups.curve import nodegroup_simple_tube, nodegroup_simple_tube_v2 -from assets.creatures.nodegroups.attach import nodegroup_surface_muscle -from assets.creatures.util.part_util import nodegroup_to_part +from infinigen.assets.creatures.util.nodegroups.curve import nodegroup_simple_tube, nodegroup_simple_tube_v2 +from infinigen.assets.creatures.util.nodegroups.attach import nodegroup_surface_muscle +from infinigen.assets.creatures.util.part_util import nodegroup_to_part -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils -from assets.creatures.geometry import nurbs as nurbs_util -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.creatures.util.geometry import nurbs as nurbs_util +from infinigen.assets.utils.tag import tag_object, tag_nodegroup def square(x): return x * x diff --git a/infinigen/assets/creatures/parts/horn.py b/infinigen/assets/creatures/parts/horn.py index 93f54e2ba..615c8d0c9 100644 --- a/infinigen/assets/creatures/parts/horn.py +++ b/infinigen/assets/creatures/parts/horn.py @@ -13,15 +13,15 @@ import numpy as np from numpy.random import normal as N, uniform as U -from assets.creatures.creature import PartFactory -from assets.creatures.genome import Joint, IKParams -from assets.creatures.util.part_util import nodegroup_to_part -from assets.creatures.util import part_util +from infinigen.assets.creatures.util.creature import PartFactory +from infinigen.assets.creatures.util.genome import Joint, IKParams +from infinigen.assets.creatures.util.part_util import nodegroup_to_part +from infinigen.assets.creatures.util import part_util -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup @node_utils.to_nodegroup('nodegroup_noise', singleton=False, type='GeometryNodeTree') def nodegroup_noise(nw: NodeWrangler): diff --git a/infinigen/assets/creatures/parts/leg.py b/infinigen/assets/creatures/parts/leg.py index 4df930ff0..2cf9a5d4a 100644 --- a/infinigen/assets/creatures/parts/leg.py +++ b/infinigen/assets/creatures/parts/leg.py @@ -10,18 +10,18 @@ import numpy as np from numpy.random import uniform as U, normal as N -from util.math import clip_gaussian +from infinigen.core.util.math import clip_gaussian -from assets.creatures.genome import Joint, IKParams +from infinigen.assets.creatures.util.genome import Joint, IKParams -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from assets.creatures.nodegroups.curve import nodegroup_simple_tube, nodegroup_simple_tube_v2 -from assets.creatures.nodegroups.attach import nodegroup_surface_muscle +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.assets.creatures.util.nodegroups.curve import nodegroup_simple_tube, nodegroup_simple_tube_v2 +from infinigen.assets.creatures.util.nodegroups.attach import nodegroup_surface_muscle -from assets.creatures.creature import PartFactory -from assets.creatures.util.part_util import nodegroup_to_part -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.creatures.util.creature import PartFactory +from infinigen.assets.creatures.util.part_util import nodegroup_to_part +from infinigen.assets.utils.tag import tag_object, tag_nodegroup @node_utils.to_nodegroup('nodegroup_quadruped_back_leg', singleton=False, type='GeometryNodeTree') def nodegroup_quadruped_back_leg(nw: NodeWrangler): diff --git a/infinigen/assets/creatures/nurbs_data/body_bird_duck.npy b/infinigen/assets/creatures/parts/nurbs_data/body_bird_duck.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/body_bird_duck.npy rename to infinigen/assets/creatures/parts/nurbs_data/body_bird_duck.npy diff --git a/infinigen/assets/creatures/nurbs_data/body_bird_gull.npy b/infinigen/assets/creatures/parts/nurbs_data/body_bird_gull.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/body_bird_gull.npy rename to infinigen/assets/creatures/parts/nurbs_data/body_bird_gull.npy diff --git a/infinigen/assets/creatures/nurbs_data/body_bird_robin.npy b/infinigen/assets/creatures/parts/nurbs_data/body_bird_robin.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/body_bird_robin.npy rename to infinigen/assets/creatures/parts/nurbs_data/body_bird_robin.npy diff --git a/infinigen/assets/creatures/nurbs_data/body_feline_cheetah.npy b/infinigen/assets/creatures/parts/nurbs_data/body_feline_cheetah.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/body_feline_cheetah.npy rename to infinigen/assets/creatures/parts/nurbs_data/body_feline_cheetah.npy diff --git a/infinigen/assets/creatures/nurbs_data/body_feline_housecat.npy b/infinigen/assets/creatures/parts/nurbs_data/body_feline_housecat.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/body_feline_housecat.npy rename to infinigen/assets/creatures/parts/nurbs_data/body_feline_housecat.npy diff --git a/infinigen/assets/creatures/nurbs_data/body_feline_tiger.npy b/infinigen/assets/creatures/parts/nurbs_data/body_feline_tiger.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/body_feline_tiger.npy rename to infinigen/assets/creatures/parts/nurbs_data/body_feline_tiger.npy diff --git a/infinigen/assets/creatures/nurbs_data/body_feline_tiger_2.npy b/infinigen/assets/creatures/parts/nurbs_data/body_feline_tiger_2.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/body_feline_tiger_2.npy rename to infinigen/assets/creatures/parts/nurbs_data/body_feline_tiger_2.npy diff --git a/infinigen/assets/creatures/nurbs_data/body_feline_wolf.npy b/infinigen/assets/creatures/parts/nurbs_data/body_feline_wolf.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/body_feline_wolf.npy rename to infinigen/assets/creatures/parts/nurbs_data/body_feline_wolf.npy diff --git a/infinigen/assets/creatures/nurbs_data/body_fish_bluefish.npy b/infinigen/assets/creatures/parts/nurbs_data/body_fish_bluefish.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/body_fish_bluefish.npy rename to infinigen/assets/creatures/parts/nurbs_data/body_fish_bluefish.npy diff --git a/infinigen/assets/creatures/nurbs_data/body_fish_crappie.npy b/infinigen/assets/creatures/parts/nurbs_data/body_fish_crappie.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/body_fish_crappie.npy rename to infinigen/assets/creatures/parts/nurbs_data/body_fish_crappie.npy diff --git a/infinigen/assets/creatures/nurbs_data/body_fish_eel.npy b/infinigen/assets/creatures/parts/nurbs_data/body_fish_eel.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/body_fish_eel.npy rename to infinigen/assets/creatures/parts/nurbs_data/body_fish_eel.npy diff --git a/infinigen/assets/creatures/nurbs_data/body_fish_pickerel.npy b/infinigen/assets/creatures/parts/nurbs_data/body_fish_pickerel.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/body_fish_pickerel.npy rename to infinigen/assets/creatures/parts/nurbs_data/body_fish_pickerel.npy diff --git a/infinigen/assets/creatures/nurbs_data/body_fish_pufferfish.npy b/infinigen/assets/creatures/parts/nurbs_data/body_fish_pufferfish.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/body_fish_pufferfish.npy rename to infinigen/assets/creatures/parts/nurbs_data/body_fish_pufferfish.npy diff --git a/infinigen/assets/creatures/nurbs_data/body_fish_spadefish.npy b/infinigen/assets/creatures/parts/nurbs_data/body_fish_spadefish.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/body_fish_spadefish.npy rename to infinigen/assets/creatures/parts/nurbs_data/body_fish_spadefish.npy diff --git a/infinigen/assets/creatures/nurbs_data/body_herbivore_cow.npy b/infinigen/assets/creatures/parts/nurbs_data/body_herbivore_cow.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/body_herbivore_cow.npy rename to infinigen/assets/creatures/parts/nurbs_data/body_herbivore_cow.npy diff --git a/infinigen/assets/creatures/nurbs_data/body_herbivore_giraffe.npy b/infinigen/assets/creatures/parts/nurbs_data/body_herbivore_giraffe.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/body_herbivore_giraffe.npy rename to infinigen/assets/creatures/parts/nurbs_data/body_herbivore_giraffe.npy diff --git a/infinigen/assets/creatures/nurbs_data/body_herbivore_goat.npy b/infinigen/assets/creatures/parts/nurbs_data/body_herbivore_goat.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/body_herbivore_goat.npy rename to infinigen/assets/creatures/parts/nurbs_data/body_herbivore_goat.npy diff --git a/infinigen/assets/creatures/nurbs_data/body_herbivore_llama.npy b/infinigen/assets/creatures/parts/nurbs_data/body_herbivore_llama.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/body_herbivore_llama.npy rename to infinigen/assets/creatures/parts/nurbs_data/body_herbivore_llama.npy diff --git a/infinigen/assets/creatures/nurbs_data/body_insect_bee.npy b/infinigen/assets/creatures/parts/nurbs_data/body_insect_bee.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/body_insect_bee.npy rename to infinigen/assets/creatures/parts/nurbs_data/body_insect_bee.npy diff --git a/infinigen/assets/creatures/nurbs_data/body_insect_beetle.npy b/infinigen/assets/creatures/parts/nurbs_data/body_insect_beetle.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/body_insect_beetle.npy rename to infinigen/assets/creatures/parts/nurbs_data/body_insect_beetle.npy diff --git a/infinigen/assets/creatures/nurbs_data/body_insect_tarantula.npy b/infinigen/assets/creatures/parts/nurbs_data/body_insect_tarantula.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/body_insect_tarantula.npy rename to infinigen/assets/creatures/parts/nurbs_data/body_insect_tarantula.npy diff --git a/infinigen/assets/creatures/nurbs_data/body_llama.npy b/infinigen/assets/creatures/parts/nurbs_data/body_llama.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/body_llama.npy rename to infinigen/assets/creatures/parts/nurbs_data/body_llama.npy diff --git a/infinigen/assets/creatures/nurbs_data/head_carnivore_tiger.npy b/infinigen/assets/creatures/parts/nurbs_data/head_carnivore_tiger.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/head_carnivore_tiger.npy rename to infinigen/assets/creatures/parts/nurbs_data/head_carnivore_tiger.npy diff --git a/infinigen/assets/creatures/nurbs_data/head_carnivore_wolf.npy b/infinigen/assets/creatures/parts/nurbs_data/head_carnivore_wolf.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/head_carnivore_wolf.npy rename to infinigen/assets/creatures/parts/nurbs_data/head_carnivore_wolf.npy diff --git a/infinigen/assets/creatures/nurbs_data/head_herbivore_cow.npy b/infinigen/assets/creatures/parts/nurbs_data/head_herbivore_cow.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/head_herbivore_cow.npy rename to infinigen/assets/creatures/parts/nurbs_data/head_herbivore_cow.npy diff --git a/infinigen/assets/creatures/nurbs_data/head_herbivore_giraffe.npy b/infinigen/assets/creatures/parts/nurbs_data/head_herbivore_giraffe.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/head_herbivore_giraffe.npy rename to infinigen/assets/creatures/parts/nurbs_data/head_herbivore_giraffe.npy diff --git a/infinigen/assets/creatures/nurbs_data/head_herbivore_goat.npy b/infinigen/assets/creatures/parts/nurbs_data/head_herbivore_goat.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/head_herbivore_goat.npy rename to infinigen/assets/creatures/parts/nurbs_data/head_herbivore_goat.npy diff --git a/infinigen/assets/creatures/nurbs_data/head_herbivore_llama.npy b/infinigen/assets/creatures/parts/nurbs_data/head_herbivore_llama.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/head_herbivore_llama.npy rename to infinigen/assets/creatures/parts/nurbs_data/head_herbivore_llama.npy diff --git a/infinigen/assets/creatures/nurbs_data/head_insect_beetle.npy b/infinigen/assets/creatures/parts/nurbs_data/head_insect_beetle.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/head_insect_beetle.npy rename to infinigen/assets/creatures/parts/nurbs_data/head_insect_beetle.npy diff --git a/infinigen/assets/creatures/nurbs_data/head_insect_wasp.npy b/infinigen/assets/creatures/parts/nurbs_data/head_insect_wasp.npy similarity index 100% rename from infinigen/assets/creatures/nurbs_data/head_insect_wasp.npy rename to infinigen/assets/creatures/parts/nurbs_data/head_insect_wasp.npy diff --git a/infinigen/assets/creatures/parts/reptile_detail.py b/infinigen/assets/creatures/parts/reptile_detail.py index 11b0d4c54..136ded6c0 100644 --- a/infinigen/assets/creatures/parts/reptile_detail.py +++ b/infinigen/assets/creatures/parts/reptile_detail.py @@ -9,14 +9,14 @@ import numpy as np from math import sin, cos, pi, exp, sqrt -from assets.creatures.creature import PartFactory, Part -from assets.creatures.genome import Joint, IKParams -from assets.creatures.util import part_util -from util import blender as butil +from infinigen.assets.creatures.util.creature import PartFactory, Part +from infinigen.assets.creatures.util.genome import Joint, IKParams +from infinigen.assets.creatures.util import part_util +from infinigen.core.util import blender as butil from scipy.interpolate import interp1d -from assets.creatures.geometry import nurbs as nurbs_util -from surfaces import surface +from infinigen.assets.creatures.util.geometry import nurbs as nurbs_util +from infinigen.core import surface logger = logging.getLogger(__name__) diff --git a/infinigen/assets/creatures/parts/ridged_fin.py b/infinigen/assets/creatures/parts/ridged_fin.py index 7d5b4c70b..df2ee929d 100644 --- a/infinigen/assets/creatures/parts/ridged_fin.py +++ b/infinigen/assets/creatures/parts/ridged_fin.py @@ -10,19 +10,19 @@ from numpy.random import uniform, normal import random -from assets.creatures.genome import Joint, IKParams +from infinigen.assets.creatures.util.genome import Joint, IKParams -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from surfaces.surface import set_geomod_inputs -from surfaces.surface_utils import clip, sample_range, sample_ratio +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.surface import set_geomod_inputs +from infinigen.assets.materials.utils.surface_utils import clip, sample_range, sample_ratio -from assets.creatures.nodegroups.curve import nodegroup_simple_tube_v2 -from assets.creatures.nodegroups.attach import nodegroup_attach_part -from assets.creatures.creature import PartFactory, Part -from assets.creatures.util.part_util import nodegroup_to_part -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.creatures.util.nodegroups.curve import nodegroup_simple_tube_v2 +from infinigen.assets.creatures.util.nodegroups.attach import nodegroup_attach_part +from infinigen.assets.creatures.util.creature import PartFactory, Part +from infinigen.assets.creatures.util.part_util import nodegroup_to_part +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup @node_utils.to_nodegroup('nodegroup_mix2_values', singleton=True, type='GeometryNodeTree') def nodegroup_mix2_values(nw: NodeWrangler): diff --git a/infinigen/assets/creatures/parts/tail.py b/infinigen/assets/creatures/parts/tail.py index 05b2f3cfe..78c088a4f 100644 --- a/infinigen/assets/creatures/parts/tail.py +++ b/infinigen/assets/creatures/parts/tail.py @@ -7,16 +7,16 @@ import numpy as np from numpy.random import normal as N -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils -from assets.creatures.genome import Joint, IKParams -from assets.creatures.nodegroups.curve import nodegroup_simple_tube_v2 -from assets.creatures.nodegroups.attach import nodegroup_surface_muscle +from infinigen.assets.creatures.util.genome import Joint, IKParams +from infinigen.assets.creatures.util.nodegroups.curve import nodegroup_simple_tube_v2 +from infinigen.assets.creatures.util.nodegroups.attach import nodegroup_surface_muscle -from assets.creatures.creature import PartFactory -from assets.creatures.util.part_util import nodegroup_to_part -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.creatures.util.creature import PartFactory +from infinigen.assets.creatures.util.part_util import nodegroup_to_part +from infinigen.assets.utils.tag import tag_object, tag_nodegroup @node_utils.to_nodegroup('nodegroup_tail', singleton=False, type='GeometryNodeTree') def nodegroup_tail(nw: NodeWrangler): diff --git a/infinigen/assets/creatures/parts/utils/draw.py b/infinigen/assets/creatures/parts/utils/draw.py index f083e166e..44f022501 100644 --- a/infinigen/assets/creatures/parts/utils/draw.py +++ b/infinigen/assets/creatures/parts/utils/draw.py @@ -6,12 +6,12 @@ import numpy as np -from assets.utils.decorate import displace_vertices -from assets.utils.draw import spin -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from surfaces import surface -from util import blender as butil +from infinigen.assets.utils.decorate import displace_vertices +from infinigen.assets.utils.draw import spin +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core import surface +from infinigen.core.util import blender as butil def make_segments(x_cuts, y_cuts, x_anchors, y_anchors, params): diff --git a/infinigen/assets/creatures/parts/wings.py b/infinigen/assets/creatures/parts/wings.py index ff656b193..779048f8d 100644 --- a/infinigen/assets/creatures/parts/wings.py +++ b/infinigen/assets/creatures/parts/wings.py @@ -11,20 +11,20 @@ import numpy as np from numpy.random import uniform as U, normal as N -from util.math import clip_gaussian +from infinigen.core.util.math import clip_gaussian -from assets.creatures.genome import Joint, IKParams +from infinigen.assets.creatures.util.genome import Joint, IKParams -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from assets.creatures.nodegroups.curve import nodegroup_simple_tube, nodegroup_simple_tube_v2 -from assets.creatures.nodegroups.attach import nodegroup_surface_muscle -from assets.creatures.nodegroups.math import nodegroup_deg2_rad -from assets.creatures.nodegroups.geometry import nodegroup_symmetric_clone +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.assets.creatures.util.nodegroups.curve import nodegroup_simple_tube, nodegroup_simple_tube_v2 +from infinigen.assets.creatures.util.nodegroups.attach import nodegroup_surface_muscle +from infinigen.assets.creatures.util.nodegroups.math import nodegroup_deg2_rad +from infinigen.assets.creatures.util.nodegroups.geometry import nodegroup_symmetric_clone -from assets.creatures.creature import PartFactory -from assets.creatures.util.part_util import nodegroup_to_part -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.creatures.util.creature import PartFactory +from infinigen.assets.creatures.util.part_util import nodegroup_to_part +from infinigen.assets.utils.tag import tag_object, tag_nodegroup @node_utils.to_nodegroup('nodegroup_feather', singleton=False, type='GeometryNodeTree') def nodegroup_feather(nw: NodeWrangler): diff --git a/infinigen/assets/creatures/reptile.py b/infinigen/assets/creatures/reptile.py index 111de46e4..fa54a0aeb 100644 --- a/infinigen/assets/creatures/reptile.py +++ b/infinigen/assets/creatures/reptile.py @@ -15,39 +15,36 @@ import numpy as np from numpy.random import normal as N, uniform as U -from assets.creatures import genome -from assets.creatures.genome import Joint -from assets.creatures import parts +from infinigen.assets.creatures.util import genome +from infinigen.assets.creatures.util.genome import Joint +from infinigen.assets.creatures import parts -from assets.creatures.creature_util import euler +from infinigen.assets.creatures.util.creature_util import euler -import surfaces.templates.basic_bsdf -import surfaces.templates.spot_sparse_attr -import surfaces.templates.snake_scale -import surfaces.templates.snake_shaders -import surfaces.templates.bird -import surfaces.templates.scale +import infinigen.assets.materials.spot_sparse_attr +import infinigen.assets.materials.snake_scale +import infinigen.assets.materials.snake_shaders +import infinigen.assets.materials.bird +import infinigen.assets.materials.scale -from assets.creatures import creature, generate as creature_gen, animation as creature_animation -from assets.creatures import cloth_sim -from util import blender as butil +from infinigen.assets.creatures.util import creature, joining, animation as creature_animation +from infinigen.core.util import blender as butil -from surfaces.templates import bone, tongue, eyeball, nose, horn -from surfaces import surface +from infinigen.assets.materials import bone, tongue, eyeball, nose, horn +from infinigen.core import surface -from placement.factory import AssetFactory +from infinigen.core.placement.factory import AssetFactory -from assets.creatures import creature, generate as creature_gen -from assets.creatures import cloth_sim +from infinigen.assets.creatures.util import creature, joining -from util.math import clip_gaussian, FixedSeed -from util import blender as butil -from util.random import random_general +from infinigen.core.util.math import clip_gaussian, FixedSeed +from infinigen.core.util import blender as butil +from infinigen.core.util.random import random_general -from assets.creatures.animation import curve_slither -from placement import animation_policy +from infinigen.assets.creatures.util.animation import curve_slither +from infinigen.core.placement import animation_policy -from assets.creatures.animation.run_cycle import follow_path +from infinigen.assets.creatures.util.animation.run_cycle import follow_path def dinosaur(): @@ -118,7 +115,7 @@ def dinosaur(): postprocess_params=dict( animation=dict(), surface_registry=[ - (surfaces.templates.snake_scale, 1), + (assets.materials.snake_scale, 1), ] ) ) @@ -181,7 +178,7 @@ def lizard_genome(): postprocess_params=dict( anim=lizard_run_params(), surface_registry=[ - (surfaces.templates.snake_scale, 1), + (assets.materials.snake_scale, 1), ] ) ) @@ -230,7 +227,7 @@ def snake_genome(): postprocess_params=dict( anim=snake_swim_params(), surface_registry=[ - (surfaces.templates.snake_scale, 1), + (assets.materials.snake_scale, 1), ] ) ) @@ -246,7 +243,7 @@ def chameleon_genome(): postprocess_params=dict( anim=snake_swim_params(), surface_registry=[ - (surfaces.templates.snake_scale, 1), + (assets.materials.snake_scale, 1), ] ) ) @@ -307,7 +304,7 @@ def frog_genome(): speed_m_s=0.5 ), surface_registry=[ - (surfaces.templates.snake_scale, 1), + (assets.materials.snake_scale, 1), ] ) ) @@ -379,7 +376,7 @@ def animate_lizard_run(root, arma, params, ik_targets): def reptile_postprocessing(body_parts, extras, params): get_extras = lambda k: [o for o in extras if k in o.name] - main_template = surfaces.surface.registry.sample_registry(params['surface_registry']) + main_template = surface.registry.sample_registry(params['surface_registry']) body = body_parts + get_extras('BodyExtra') main_template.apply(body) @@ -390,7 +387,7 @@ def reptile_postprocessing(body_parts, extras, params): def chameleon_postprocessing(body_parts, extras, params): get_extras = lambda k: [o for o in extras if k in o.name] - main_template = surfaces.surface.registry.sample_registry(params['surface_registry']) + main_template = surface.registry.sample_registry(params['surface_registry']) body = body_parts + get_extras('BodyExtra') main_template.apply(body) @@ -409,7 +406,7 @@ def create_asset(self, i, animate=False, rigging=False, cloth=False, **kwargs): genome = lizard_genome() root, parts = creature.genome_to_creature(genome, name=f'lizard({self.factory_seed}, {i})') - joined, extras, arma, ik_targets = creature_gen.join_and_rig_parts(root, parts, genome, + joined, extras, arma, ik_targets = joining.join_and_rig_parts(root, parts, genome, postprocess_func=reptile_postprocessing, adapt_mode='remesh', rigging=rigging, **kwargs) if animate and arma is not None: pass @@ -434,7 +431,7 @@ def create_asset(self, i, animate=False, rigging=False, simulate=False, **kwargs genome = frog_genome() root, parts = creature.genome_to_creature(genome, name=f'frog({self.factory_seed}, {i})') - joined, extras, arma, ik_targets = creature_gen.join_and_rig_parts(root, parts, genome, + joined, extras, arma, ik_targets = joining.join_and_rig_parts(root, parts, genome, postprocess_func=reptile_postprocessing, adapt_mode='remesh', rigging=rigging, **kwargs) if animate and arma is not None: pass @@ -492,7 +489,7 @@ def create_asset(self, i, placeholder, **kwargs): genome = snake_genome() root, parts = creature.genome_to_creature(genome, name=f'snake({self.factory_seed}, {i})') - joined, extras, arma, ik_targets = creature_gen.join_and_rig_parts(root, parts, genome, + joined, extras, arma, ik_targets = joining.join_and_rig_parts(root, parts, genome, postprocess_func=reptile_postprocessing, adaptive_resolution=False, rigging=False, **kwargs) joined = butil.join_objects([joined] + extras) @@ -536,7 +533,7 @@ def create_asset(self, i, placeholder, **kwargs): genome = chameleon_genome() root, parts = creature.genome_to_creature(genome, name=f'snake({self.factory_seed}, {i})') - joined, extras, arma, ik_targets = creature_gen.join_and_rig_parts(root, parts, genome, + joined, extras, arma, ik_targets = joining.join_and_rig_parts(root, parts, genome, postprocess_func=reptile_postprocessing, adaptive_resolution=False, rigging=False, **kwargs) joined = butil.join_objects([joined] + extras) diff --git a/infinigen/core/surfaces/__init__.py b/infinigen/assets/creatures/util/animation/__init__.py similarity index 100% rename from infinigen/core/surfaces/__init__.py rename to infinigen/assets/creatures/util/animation/__init__.py diff --git a/infinigen/assets/creatures/util/animation/curve_slither.py b/infinigen/assets/creatures/util/animation/curve_slither.py index e4615c9a5..c515467d5 100644 --- a/infinigen/assets/creatures/util/animation/curve_slither.py +++ b/infinigen/assets/creatures/util/animation/curve_slither.py @@ -16,13 +16,13 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface import pdb -from util import blender as butil +from infinigen.core.util import blender as butil @node_utils.to_nodegroup('nodegroup_add_wiggles', singleton=True, type='GeometryNodeTree') def nodegroup_add_wiggles(nw: NodeWrangler): diff --git a/infinigen/assets/creatures/util/animation/driver_repeated.py b/infinigen/assets/creatures/util/animation/driver_repeated.py index e77e1a0b5..0dfa58750 100644 --- a/infinigen/assets/creatures/util/animation/driver_repeated.py +++ b/infinigen/assets/creatures/util/animation/driver_repeated.py @@ -7,7 +7,7 @@ import numpy as np from numpy.random import uniform as U, uniform -from util.math import FixedSeed, int_hash +from infinigen.core.util.math import FixedSeed, int_hash def repeated_driver(start, end, freq, off=None, seed=None): diff --git a/infinigen/assets/creatures/util/animation/driver_wiggle.py b/infinigen/assets/creatures/util/animation/driver_wiggle.py index 5e3cdf4d1..db3cb80c3 100644 --- a/infinigen/assets/creatures/util/animation/driver_wiggle.py +++ b/infinigen/assets/creatures/util/animation/driver_wiggle.py @@ -15,9 +15,9 @@ import pdb -from assets.creatures import creature, creature_util as cutil -from util.math import clip_gaussian, randomspacing, lerp -from util import blender as butil +from infinigen.assets.creatures.util import creature, creature_util as cutil +from infinigen.core.util.math import clip_gaussian, randomspacing, lerp +from infinigen.core.util import blender as butil logger = logging.getLogger('creatures.animation') diff --git a/infinigen/assets/creatures/util/animation/idle.py b/infinigen/assets/creatures/util/animation/idle.py index 295d5daa8..7d9adac33 100644 --- a/infinigen/assets/creatures/util/animation/idle.py +++ b/infinigen/assets/creatures/util/animation/idle.py @@ -15,9 +15,9 @@ import pdb -from assets.creatures import creature, creature_util as cutil -from util.math import clip_gaussian, randomspacing, lerp -from util import blender as butil +from infinigen.assets.creatures.util import creature, creature_util as cutil +from infinigen.core.util.math import clip_gaussian, randomspacing, lerp +from infinigen.core.util import blender as butil def compute_ik_length_height(targets): bounds = [] diff --git a/infinigen/assets/creatures/util/animation/run_cycle.py b/infinigen/assets/creatures/util/animation/run_cycle.py index c62025b69..627843f79 100644 --- a/infinigen/assets/creatures/util/animation/run_cycle.py +++ b/infinigen/assets/creatures/util/animation/run_cycle.py @@ -17,9 +17,9 @@ import pdb -from assets.creatures import creature, creature_util as cutil -from util.math import clip_gaussian, randomspacing, lerp -from util import blender as butil +from infinigen.assets.creatures.util import creature, creature_util as cutil +from infinigen.core.util.math import clip_gaussian, randomspacing, lerp +from infinigen.core.util import blender as butil logger = logging.getLogger('creatures.animation') diff --git a/infinigen/assets/creatures/util/boid_swarm.py b/infinigen/assets/creatures/util/boid_swarm.py index f884e9ee0..25e64b14a 100644 --- a/infinigen/assets/creatures/util/boid_swarm.py +++ b/infinigen/assets/creatures/util/boid_swarm.py @@ -12,12 +12,12 @@ import numpy as np from numpy.random import uniform as U, normal as N -from placement.factory import AssetFactory -from placement import particles, animation_policy +from infinigen.core.placement.factory import AssetFactory +from infinigen.core.placement import particles, animation_policy -from util import blender as butil -from util.math import FixedSeed -from util.random import random_general +from infinigen.core.util import blender as butil +from infinigen.core.util.math import FixedSeed +from infinigen.core.util.random import random_general logger = logging.getLogger('boids') diff --git a/infinigen/assets/creatures/util/cloth_sim.py b/infinigen/assets/creatures/util/cloth_sim.py index de4d591a9..8d4d7d867 100644 --- a/infinigen/assets/creatures/util/cloth_sim.py +++ b/infinigen/assets/creatures/util/cloth_sim.py @@ -12,12 +12,12 @@ import bpy -from surfaces.surface import attribute_to_vertex_group +from infinigen.core.surface import attribute_to_vertex_group -from util import blender as butil -from util.math import dict_convex_comb -from util.logging import Timer -from nodes.node_wrangler import NodeWrangler, Nodes +from infinigen.core.util import blender as butil +from infinigen.core.util.math import dict_convex_comb +from infinigen.core.util.logging import Timer +from infinigen.core.nodes.node_wrangler import NodeWrangler, Nodes logger = logging.getLogger('cloth') diff --git a/infinigen/assets/creatures/util/creature.py b/infinigen/assets/creatures/util/creature.py index dac704bcb..e35fff702 100644 --- a/infinigen/assets/creatures/util/creature.py +++ b/infinigen/assets/creatures/util/creature.py @@ -16,18 +16,18 @@ import numpy as np -from assets.creatures.geometry import lofting, skin_ops -from assets.creatures.creature_util import interp_dict, euler -from assets.creatures import genome -from assets.creatures.util import tree, join_smoothing - -from assets.creatures import genome - -from surfaces import surface -from placement import detail -from util import blender as butil, logging as logging_util -from util.math import homogenize, lerp_sample, lerp -from nodes.node_wrangler import Nodes +from infinigen.assets.creatures.util.geometry import lofting, skin_ops +from infinigen.assets.creatures.util.creature_util import interp_dict, euler +from infinigen.assets.creatures.util import genome +from infinigen.assets.creatures.util import tree, join_smoothing + +from infinigen.assets.creatures.util import genome + +from infinigen.core import surface +from infinigen.core.placement import detail +from infinigen.core.util import blender as butil, logging as logging_util +from infinigen.core.util.math import homogenize, lerp_sample, lerp +from infinigen.core.nodes.node_wrangler import Nodes logger = logging.getLogger('creatures') diff --git a/infinigen/assets/creatures/util/creature_parser.py b/infinigen/assets/creatures/util/creature_parser.py index 1519458f7..5f6560432 100644 --- a/infinigen/assets/creatures/util/creature_parser.py +++ b/infinigen/assets/creatures/util/creature_parser.py @@ -9,14 +9,14 @@ import numpy as np -from util import blender as butil -from nodes.node_transpiler.transpiler import transpile, indent -from assets.creatures.geometry import lofting +from infinigen.core.util import blender as butil +from infinigen.core.nodes.node_transpiler.transpiler import transpile, indent +from infinigen.assets.creatures.util.geometry import lofting def prefix(): return ( "import numpy as np\n" - "from assets.creatures.creature import CreatureGenome, PartGenome, Attachment, Joint\n" + "from infinigen.assets.creatures.util.creature import CreatureGenome, PartGenome, Attachment, Joint\n" ) def repr_np_array(v): @@ -130,12 +130,12 @@ def parse_creature(nurbs_root, mesh_root, profiles_folder): if mesh_part.parent is not None: atts[name] = parse_attachment(mesh_part, mesh_part.parent, nurbs_part.parent) - creature_genome_args = { + joiningome_args = { 'parts': repr_function_call('dict', {name: f'{name}()' for name in names}), 'attachments': repr_function_call('dict', atts) } - body = f"return {repr_function_call('CreatureGenome', creature_genome_args)}" + body = f"return {repr_function_call('CreatureGenome', joiningome_args)}" code += f"def creature():\n {indent(body)}" return code diff --git a/infinigen/assets/creatures/util/creature_util.py b/infinigen/assets/creatures/util/creature_util.py index b5831abec..4335874bd 100644 --- a/infinigen/assets/creatures/util/creature_util.py +++ b/infinigen/assets/creatures/util/creature_util.py @@ -13,8 +13,8 @@ import numpy as np -from util.math import lerp -from util import blender as butil +from infinigen.core.util.math import lerp +from infinigen.core.util import blender as butil def euler(r, p, y): return mathutils.Euler(np.deg2rad([r, p, y])).to_quaternion() diff --git a/infinigen/assets/creatures/util/genome.py b/infinigen/assets/creatures/util/genome.py index 110f60297..61116795c 100644 --- a/infinigen/assets/creatures/util/genome.py +++ b/infinigen/assets/creatures/util/genome.py @@ -14,10 +14,10 @@ from scipy.sparse.csgraph import maximum_bipartite_matching from scipy.sparse import csr_matrix -from assets.creatures.util.tree import Tree -from assets.creatures.creature_util import interp_dict +from infinigen.assets.creatures.util.tree import Tree +from infinigen.assets.creatures.util.creature_util import interp_dict -from util.math import lerp +from infinigen.core.util.math import lerp @dataclass diff --git a/infinigen/assets/creatures/util/geometry/blending.py b/infinigen/assets/creatures/util/geometry/blending.py index 8c918615d..966820327 100644 --- a/infinigen/assets/creatures/util/geometry/blending.py +++ b/infinigen/assets/creatures/util/geometry/blending.py @@ -17,14 +17,14 @@ import mathutils from geomdl import NURBS -from util.math import rotate_match_directions, normalize, project_to_unit_vector -from util.math import wrap_around_cyclic_coord, new_domain_from_affine, affine_from_new_domain -from util.math import FixedSeed -from util import blender as butil - -from assets.creatures.geometry.nurbs import blender_mesh_from_pydata, compute_cylinder_topology -from assets.creatures.geometry import nurbs -from assets.creatures.geometry import nurbs, lofting, skin_ops +from infinigen.core.util.math import rotate_match_directions, normalize, project_to_unit_vector +from infinigen.core.util.math import wrap_around_cyclic_coord, new_domain_from_affine, affine_from_new_domain +from infinigen.core.util.math import FixedSeed +from infinigen.core.util import blender as butil + +from infinigen.assets.creatures.geometry.nurbs import blender_mesh_from_pydata, compute_cylinder_topology +from infinigen.assets.creatures.geometry import nurbs +from infinigen.assets.creatures.geometry import nurbs, lofting, skin_ops from shapely.geometry import Polygon, Point, LineString import shapely diff --git a/infinigen/assets/creatures/util/geometry/cpp_utils/__init__.py b/infinigen/assets/creatures/util/geometry/cpp_utils/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/infinigen/assets/creatures/util/geometry/curve.py b/infinigen/assets/creatures/util/geometry/curve.py index 18c47f238..8c2f8fa2f 100644 --- a/infinigen/assets/creatures/util/geometry/curve.py +++ b/infinigen/assets/creatures/util/geometry/curve.py @@ -6,7 +6,7 @@ import bpy -from util import blender as butil +from infinigen.core.util import blender as butil class Curve: diff --git a/infinigen/assets/creatures/util/geometry/lofting.py b/infinigen/assets/creatures/util/geometry/lofting.py index ce6251b69..0cdc9f28e 100644 --- a/infinigen/assets/creatures/util/geometry/lofting.py +++ b/infinigen/assets/creatures/util/geometry/lofting.py @@ -12,10 +12,9 @@ import numpy as np -from util import blender as butil -from util.math import rotate_match_directions, lerp_sample, inverse_interpolate +from infinigen.core.util import blender as butil +from infinigen.core.util.math import rotate_match_directions, lerp_sample, inverse_interpolate from .nurbs import nurbs -from assets.creatures.geometry.cpp_utils import bnurbs def factorize_nurbs_handles(handles): diff --git a/infinigen/assets/creatures/util/geometry/metaballs.py b/infinigen/assets/creatures/util/geometry/metaballs.py index f102a39c6..4ad38f671 100644 --- a/infinigen/assets/creatures/util/geometry/metaballs.py +++ b/infinigen/assets/creatures/util/geometry/metaballs.py @@ -10,7 +10,7 @@ import numpy as np -from util import blender as butil +from infinigen.core.util import blender as butil class MBallStructure: diff --git a/infinigen/assets/creatures/util/geometry/nurbs.py b/infinigen/assets/creatures/util/geometry/nurbs.py index 78d4f2117..809b42bba 100644 --- a/infinigen/assets/creatures/util/geometry/nurbs.py +++ b/infinigen/assets/creatures/util/geometry/nurbs.py @@ -12,9 +12,9 @@ from geomdl import NURBS, knotvector import numpy as np -from util import blender as butil -from util.math import randomspacing -from .cpp_utils import bnurbs +from infinigen.core.util import blender as butil +from infinigen.core.util.math import randomspacing +import bnurbs def compute_cylinder_topology(n: int, m: int, uvs=False, cyclic=True, h_neighbors=None): diff --git a/infinigen/assets/creatures/util/geometry/skin_ops.py b/infinigen/assets/creatures/util/geometry/skin_ops.py index c8b85ba03..39697ebaa 100644 --- a/infinigen/assets/creatures/util/geometry/skin_ops.py +++ b/infinigen/assets/creatures/util/geometry/skin_ops.py @@ -11,9 +11,9 @@ import numpy as np from numpy.random import uniform, normal -from assets.creatures.geometry.lofting import Skin -from util.math import lerp, randomspacing -from assets.creatures.geometry import lofting +from infinigen.assets.creatures.util.geometry.lofting import Skin +from infinigen.core.util.math import lerp, randomspacing +from infinigen.assets.creatures.util.geometry import lofting def extend_cap(skin: Skin, r=1, margin=0): res = copy(skin) diff --git a/infinigen/assets/creatures/util/geonode_part.py b/infinigen/assets/creatures/util/geonode_part.py index 1f518f8a7..9c420aa79 100644 --- a/infinigen/assets/creatures/util/geonode_part.py +++ b/infinigen/assets/creatures/util/geonode_part.py @@ -9,10 +9,10 @@ import numpy as np -from assets.creatures.creature import Part, Joint, infer_skeleton_from_mesh -from util import blender as butil +from infinigen.assets.creatures.util.creature import Part, Joint, infer_skeleton_from_mesh +from infinigen.core.util import blender as butil -from nodes.node_wrangler import NodeWrangler, Nodes, geometry_node_group_empty_new +from infinigen.core.nodes.node_wrangler import NodeWrangler, Nodes, geometry_node_group_empty_new def extract_nodegroup_geo(target_obj, nodegroup, k, ng_params=None): diff --git a/infinigen/assets/creatures/util/hair.py b/infinigen/assets/creatures/util/hair.py index 8427a082b..e2dfa2aa1 100644 --- a/infinigen/assets/creatures/util/hair.py +++ b/infinigen/assets/creatures/util/hair.py @@ -15,12 +15,12 @@ import numpy as np from scipy.spatial import KDTree -from util import blender as butil -from surfaces import surface -from nodes.node_wrangler import NodeWrangler, Nodes -from nodes import node_utils +from infinigen.core.util import blender as butil +from infinigen.core import surface +from infinigen.core.nodes.node_wrangler import NodeWrangler, Nodes +from infinigen.core.nodes import node_utils -from assets.creatures.nodegroups.hair import nodegroup_comb_direction, nodegroup_duplicate_to_clumps, \ +from infinigen.assets.creatures.util.nodegroups.hair import nodegroup_comb_direction, nodegroup_duplicate_to_clumps, \ nodegroup_hair_position, nodegroup_comb_hairs, nodegroup_strand_noise, nodegroup_hair_length_rescale, \ nodegroup_snap_roots_to_surface diff --git a/infinigen/assets/creatures/util/join_smoothing.py b/infinigen/assets/creatures/util/join_smoothing.py index 296d2022c..2a480f9da 100644 --- a/infinigen/assets/creatures/util/join_smoothing.py +++ b/infinigen/assets/creatures/util/join_smoothing.py @@ -11,9 +11,9 @@ from mathutils.bvhtree import BVHTree from mathutils import geometry, Vector -from util import blender as butil +from infinigen.core.util import blender as butil -from assets.creatures.geometry.nurbs import compute_cylinder_topology, blender_mesh_from_pydata +from infinigen.assets.creatures.util.geometry.nurbs import compute_cylinder_topology, blender_mesh_from_pydata import numpy as np diff --git a/infinigen/assets/creatures/util/joining.py b/infinigen/assets/creatures/util/joining.py index 6c21d061c..8d550b40b 100644 --- a/infinigen/assets/creatures/util/joining.py +++ b/infinigen/assets/creatures/util/joining.py @@ -9,14 +9,14 @@ import numpy as np -from assets.creatures.util import tree, join_smoothing +from infinigen.assets.creatures.util import tree, join_smoothing -from assets.creatures import rigging as creature_rigging +from infinigen.assets.creatures.util import rigging as creature_rigging -from surfaces import surface -from placement import detail -from util import blender as butil -from util.logging import Suppress, Timer +from infinigen.core import surface +from infinigen.core.placement import detail +from infinigen.core.util import blender as butil +from infinigen.core.util.logging import Suppress, Timer logger = logging.getLogger('creatures') diff --git a/infinigen/assets/creatures/util/nodegroups/attach.py b/infinigen/assets/creatures/util/nodegroups/attach.py index 7be59bd82..54241f32a 100644 --- a/infinigen/assets/creatures/util/nodegroups/attach.py +++ b/infinigen/assets/creatures/util/nodegroups/attach.py @@ -7,10 +7,10 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface from .math import nodegroup_deg2_rad from .curve import nodegroup_warped_circle_curve, nodegroup_smooth_taper, nodegroup_profile_part diff --git a/infinigen/assets/creatures/util/nodegroups/curve.py b/infinigen/assets/creatures/util/nodegroups/curve.py index 100c6c633..e812f98c2 100644 --- a/infinigen/assets/creatures/util/nodegroups/curve.py +++ b/infinigen/assets/creatures/util/nodegroups/curve.py @@ -7,10 +7,10 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface from .math import nodegroup_polar_to_cart, nodegroup_aspect_to_dim, nodegroup_vector_sum, nodegroup_switch4 @node_utils.to_nodegroup('nodegroup_simple_tube', singleton=True, type='GeometryNodeTree') diff --git a/infinigen/assets/creatures/util/nodegroups/geometry.py b/infinigen/assets/creatures/util/nodegroups/geometry.py index 6898e4335..af41451bf 100644 --- a/infinigen/assets/creatures/util/nodegroups/geometry.py +++ b/infinigen/assets/creatures/util/nodegroups/geometry.py @@ -7,10 +7,10 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface @node_utils.to_nodegroup('nodegroup_symmetric_instance', singleton=True, type='GeometryNodeTree') def nodegroup_symmetric_instance(nw: NodeWrangler): diff --git a/infinigen/assets/creatures/util/nodegroups/hair.py b/infinigen/assets/creatures/util/nodegroups/hair.py index c0589fd08..aa2c03de2 100644 --- a/infinigen/assets/creatures/util/nodegroups/hair.py +++ b/infinigen/assets/creatures/util/nodegroups/hair.py @@ -7,12 +7,12 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.creatures.nodegroups.math import nodegroup_vector_bezier +from infinigen.assets.creatures.util.nodegroups.math import nodegroup_vector_bezier @node_utils.to_nodegroup('nodegroup_comb_direction', singleton=True, type='GeometryNodeTree') def nodegroup_comb_direction(nw: NodeWrangler): diff --git a/infinigen/assets/creatures/util/nodegroups/math.py b/infinigen/assets/creatures/util/nodegroups/math.py index f09d38646..49e55c8f2 100644 --- a/infinigen/assets/creatures/util/nodegroups/math.py +++ b/infinigen/assets/creatures/util/nodegroups/math.py @@ -7,10 +7,10 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface @node_utils.to_nodegroup('nodegroup_floor_ceil', singleton=False, type='GeometryNodeTree') def nodegroup_floor_ceil(nw: NodeWrangler): diff --git a/infinigen/assets/creatures/util/nodegroups/sculpt_v1.py b/infinigen/assets/creatures/util/nodegroups/sculpt_v1.py index de0c82acd..2a830bdb8 100644 --- a/infinigen/assets/creatures/util/nodegroups/sculpt_v1.py +++ b/infinigen/assets/creatures/util/nodegroups/sculpt_v1.py @@ -7,13 +7,13 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.creatures.nodegroups.math import nodegroup_floor_ceil, nodegroup_clamp_or_wrap -from assets.creatures.nodegroups.geometry import nodegroup_symmetric_clone +from infinigen.assets.creatures.util.nodegroups.math import nodegroup_floor_ceil, nodegroup_clamp_or_wrap +from infinigen.assets.creatures.util.nodegroups.geometry import nodegroup_symmetric_clone @node_utils.to_nodegroup('nodegroup_u_v_param_to_vert_idxs', singleton=False, type='GeometryNodeTree') def nodegroup_u_v_param_to_vert_idxs(nw: NodeWrangler): diff --git a/infinigen/assets/creatures/util/nodegroups/shader.py b/infinigen/assets/creatures/util/nodegroups/shader.py index 7e751d7c6..3ad201e1a 100644 --- a/infinigen/assets/creatures/util/nodegroups/shader.py +++ b/infinigen/assets/creatures/util/nodegroups/shader.py @@ -7,10 +7,10 @@ import bpy import mathutils from numpy.random import uniform as U, normal as N, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface @node_utils.to_nodegroup('nodegroup_norm_local_pos', singleton=True, type='ShaderNodeTree') def nodegroup_norm_local_pos(nw: NodeWrangler): diff --git a/infinigen/assets/creatures/util/part_util.py b/infinigen/assets/creatures/util/part_util.py index d0c621f58..6192e4b85 100644 --- a/infinigen/assets/creatures/util/part_util.py +++ b/infinigen/assets/creatures/util/part_util.py @@ -11,11 +11,11 @@ import bpy import numpy as np -from assets.creatures.creature import Part, PartFactory, infer_skeleton_from_mesh -from assets.creatures.geometry import nurbs -from util import blender as butil +from infinigen.assets.creatures.util.creature import Part, PartFactory, infer_skeleton_from_mesh +from infinigen.assets.creatures.util.geometry import nurbs +from infinigen.core.util import blender as butil -from nodes.node_wrangler import NodeWrangler, Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler, Nodes def extract_nodegroup_geo(target_obj, nodegroup, k, ng_params=None): diff --git a/infinigen/assets/creatures/util/rigging.py b/infinigen/assets/creatures/util/rigging.py index af487d9f7..080cbf191 100644 --- a/infinigen/assets/creatures/util/rigging.py +++ b/infinigen/assets/creatures/util/rigging.py @@ -14,10 +14,10 @@ import numpy as np from tqdm import tqdm -from util import blender as butil, math as mutil -from assets.creatures.util import tree -from assets.creatures.creature import Part, infer_skeleton_from_mesh -from assets.creatures.genome import Joint, IKParams +from infinigen.core.util import blender as butil, math as mutil +from infinigen.assets.creatures.util import tree +from infinigen.assets.creatures.util.creature import Part, infer_skeleton_from_mesh +from infinigen.assets.creatures.util.genome import Joint, IKParams logger = logging.getLogger() diff --git a/infinigen/assets/deformed_trees/base.py b/infinigen/assets/deformed_trees/base.py index 756a0b8b4..039d41d0b 100644 --- a/infinigen/assets/deformed_trees/base.py +++ b/infinigen/assets/deformed_trees/base.py @@ -8,15 +8,15 @@ from numpy.random import uniform -from assets.trees import TreeFactory -from assets.trees.generate import GenericTreeFactory, random_species -from assets.utils.misc import log_uniform -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from placement.factory import AssetFactory -from surfaces import surface -from surfaces.surface import NoApply -from util.math import FixedSeed +from infinigen.assets.trees import TreeFactory +from infinigen.assets.trees.generate import GenericTreeFactory, random_species +from infinigen.assets.utils.misc import log_uniform +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core.placement.factory import AssetFactory +from infinigen.core import surface +from infinigen.core.surface import NoApply +from infinigen.core.util.math import FixedSeed class BaseDeformedTreeFactory(AssetFactory): diff --git a/infinigen/assets/deformed_trees/fallen.py b/infinigen/assets/deformed_trees/fallen.py index 09e9ea1aa..a8c592aa7 100644 --- a/infinigen/assets/deformed_trees/fallen.py +++ b/infinigen/assets/deformed_trees/fallen.py @@ -9,15 +9,15 @@ import numpy as np from numpy.random import uniform -from assets.deformed_trees.base import BaseDeformedTreeFactory -from assets.utils.decorate import assign_material, join_objects, remove_vertices, separate_loose -from assets.utils.draw import cut_plane -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from surfaces import surface -from util.blender import deep_clone_obj -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.deformed_trees.base import BaseDeformedTreeFactory +from infinigen.assets.utils.decorate import assign_material, join_objects, remove_vertices, separate_loose +from infinigen.assets.utils.draw import cut_plane +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core import surface +from infinigen.core.util.blender import deep_clone_obj +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class FallenTreeFactory(BaseDeformedTreeFactory): diff --git a/infinigen/assets/deformed_trees/generate.py b/infinigen/assets/deformed_trees/generate.py index e195e52a6..f18c79303 100644 --- a/infinigen/assets/deformed_trees/generate.py +++ b/infinigen/assets/deformed_trees/generate.py @@ -6,11 +6,11 @@ import numpy as np -from assets.deformed_trees import FallenTreeFactory, HollowTreeFactory, RottenTreeFactory -from assets.deformed_trees.truncated import TruncatedTreeFactory -from placement.factory import AssetFactory -from util.math import FixedSeed -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.deformed_trees import FallenTreeFactory, HollowTreeFactory, RottenTreeFactory +from infinigen.assets.deformed_trees.truncated import TruncatedTreeFactory +from infinigen.core.placement.factory import AssetFactory +from infinigen.core.util.math import FixedSeed +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class DeformedTreeFactory(AssetFactory): diff --git a/infinigen/assets/deformed_trees/hollow.py b/infinigen/assets/deformed_trees/hollow.py index cbcfe9613..e0e7aeddf 100644 --- a/infinigen/assets/deformed_trees/hollow.py +++ b/infinigen/assets/deformed_trees/hollow.py @@ -8,15 +8,15 @@ import numpy as np from numpy.random import uniform -from assets.deformed_trees.base import BaseDeformedTreeFactory -from assets.utils.decorate import assign_material, join_objects, read_material_index, write_material_index -from assets.utils.nodegroup import geo_selection -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from surfaces import surface -from util.blender import deep_clone_obj -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.deformed_trees.base import BaseDeformedTreeFactory +from infinigen.assets.utils.decorate import assign_material, join_objects, read_material_index, write_material_index +from infinigen.assets.utils.nodegroup import geo_selection +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core import surface +from infinigen.core.util.blender import deep_clone_obj +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class HollowTreeFactory(BaseDeformedTreeFactory): diff --git a/infinigen/assets/deformed_trees/rotten.py b/infinigen/assets/deformed_trees/rotten.py index 7787e770e..93a956751 100644 --- a/infinigen/assets/deformed_trees/rotten.py +++ b/infinigen/assets/deformed_trees/rotten.py @@ -8,17 +8,17 @@ import numpy as np from numpy.random import uniform -from assets.deformed_trees.base import BaseDeformedTreeFactory -from assets.utils.decorate import assign_material, join_objects, read_material_index, remove_vertices, \ +from infinigen.assets.deformed_trees.base import BaseDeformedTreeFactory +from infinigen.assets.utils.decorate import assign_material, join_objects, read_material_index, remove_vertices, \ separate_loose, write_material_index -from assets.utils.misc import log_uniform -from assets.utils.object import new_icosphere -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from surfaces import surface -from util.blender import deep_clone_obj -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.utils.misc import log_uniform +from infinigen.assets.utils.object import new_icosphere +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core import surface +from infinigen.core.util.blender import deep_clone_obj +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class RottenTreeFactory(BaseDeformedTreeFactory): @staticmethod diff --git a/infinigen/assets/deformed_trees/truncated.py b/infinigen/assets/deformed_trees/truncated.py index 0727f621d..42dc5bdef 100644 --- a/infinigen/assets/deformed_trees/truncated.py +++ b/infinigen/assets/deformed_trees/truncated.py @@ -7,13 +7,13 @@ import numpy as np from numpy.random import uniform -from assets.deformed_trees import FallenTreeFactory -from assets.utils.decorate import read_co -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from surfaces import surface -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.deformed_trees import FallenTreeFactory +from infinigen.assets.utils.decorate import read_co +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core import surface +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class TruncatedTreeFactory(FallenTreeFactory): diff --git a/infinigen/assets/fluid/__init__.py b/infinigen/assets/fluid/__init__.py index e69de29bb..ba4bdefd2 100644 --- a/infinigen/assets/fluid/__init__.py +++ b/infinigen/assets/fluid/__init__.py @@ -0,0 +1 @@ +from .fluid_scenecomp_additions import cached_fire_scenecomp_options \ No newline at end of file diff --git a/infinigen/assets/fluid/asset_cache.py b/infinigen/assets/fluid/asset_cache.py index b6a89fa9d..9fd8da5d6 100644 --- a/infinigen/assets/fluid/asset_cache.py +++ b/infinigen/assets/fluid/asset_cache.py @@ -17,26 +17,15 @@ import numpy as np import json -try: - # from tools.asset_grid import import_surface_registry - from fluid.fluid import ( - find_available_cache, - set_obj_on_fire, - fire_smoke_ground_truth, - ) -except ImportError: - sys.path.append(str(Path(os.path.split(os.path.abspath(__file__))[0]))) - # from tools.asset_grid import import_surface_registry - from fluid.fluid import ( - find_available_cache, - set_obj_on_fire, - fire_smoke_ground_truth, - ) - +from infinigen.assets.fluid.fluid import ( + find_available_cache, + set_obj_on_fire, + fire_smoke_ground_truth, +) import time -from util import blender as butil -from util.math import FixedSeed +from infinigen.core.util import blender as butil +from infinigen.core.util.math import FixedSeed import logging RAND_SEED_MAX = 1e5 diff --git a/infinigen/assets/fluid/bounding_box.py b/infinigen/assets/fluid/bounding_box.py index 0a8290f37..d3b1af32a 100644 --- a/infinigen/assets/fluid/bounding_box.py +++ b/infinigen/assets/fluid/bounding_box.py @@ -6,10 +6,10 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface def geometry_geometry_nodes(nw: NodeWrangler, obj): diff --git a/infinigen/assets/fluid/cached_factory_wrappers.py b/infinigen/assets/fluid/cached_factory_wrappers.py index f2f698248..407535cd4 100644 --- a/infinigen/assets/fluid/cached_factory_wrappers.py +++ b/infinigen/assets/fluid/cached_factory_wrappers.py @@ -1,8 +1,8 @@ -from assets.trees import TreeFactory, BushFactory -from assets.creatures import CarnivoreFactory -from assets.cactus import CactusFactory -from assets.boulder import BoulderFactory +from infinigen.assets.trees import TreeFactory, BushFactory +from infinigen.assets.creatures import CarnivoreFactory +from infinigen.assets.cactus import CactusFactory +from infinigen.assets.rocks.boulder import BoulderFactory class CachedBoulderFactory(BoulderFactory): pass diff --git a/infinigen/assets/fluid/duplication_geomod.py b/infinigen/assets/fluid/duplication_geomod.py index cc5b9e0f2..243032dca 100644 --- a/infinigen/assets/fluid/duplication_geomod.py +++ b/infinigen/assets/fluid/duplication_geomod.py @@ -6,10 +6,10 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface def duplicate(nw: NodeWrangler, obj): diff --git a/infinigen/assets/fluid/flip_fluid.py b/infinigen/assets/fluid/flip_fluid.py index 2d5b41b61..98539387f 100644 --- a/infinigen/assets/fluid/flip_fluid.py +++ b/infinigen/assets/fluid/flip_fluid.py @@ -9,37 +9,28 @@ from numpy.random import uniform from mathutils import Vector -sys.path.append(str(Path(os.path.split(os.path.abspath(__file__))[0]) / "..")) - -from nodes.node_wrangler import ( - Nodes, - NodeWrangler, - infer_input_socket, - infer_output_socket, -) import bpy -import numpy as np os.environ["OPENCV_IO_ENABLE_OPENEXR"] = "1" # This must be done BEFORE import cv2. -from surfaces.templates import water, lava, river_water, new_whitewater -from surfaces.templates import blackbody_shader, waterfall_material, smoke_material -from util.blender import deep_clone_obj -from util.logging import Timer +from infinigen.assets.materials import water, lava, river_water, new_whitewater +from infinigen.assets.materials import blackbody_shader, waterfall_material, smoke_material +from infinigen.core.util.blender import deep_clone_obj +from infinigen.core.util.logging import Timer -from util import blender as butil -from util.organization import AssetFile, Materials, Process -from util.blender import object_from_trimesh, SelectObjects -from terrain.utils import Mesh +from infinigen.core.util import blender as butil +from infinigen.core.util.organization import AssetFile, Materials, Process +from infinigen.core.util.blender import object_from_trimesh, SelectObjects +from infinigen.terrain.utils import Mesh import cv2 import subprocess -from fluid.fluid import find_available_cache, obj_bb_minmax -import fluid.liquid_particle_material as liquid_particle_material +from infinigen.assets.fluid.fluid import find_available_cache, obj_bb_minmax +import infinigen.assets.fluid.liquid_particle_material as liquid_particle_material from numpy.random import normal as N import gin -from util.organization import Assets, LandTile +from infinigen.core.util.organization import Assets, LandTile def get_objs_inside_domain(dom, objects): diff --git a/infinigen/assets/fluid/fluid.py b/infinigen/assets/fluid/fluid.py index 596f41ffe..96b08399e 100644 --- a/infinigen/assets/fluid/fluid.py +++ b/infinigen/assets/fluid/fluid.py @@ -10,9 +10,9 @@ from numpy.random import uniform, normal, randint from mathutils import Vector import logging -from util.math import clip_gaussian +from infinigen.core.util.math import clip_gaussian -from nodes.node_wrangler import ( +from infinigen.core.nodes.node_wrangler import ( Nodes, NodeWrangler, infer_input_socket, @@ -22,16 +22,16 @@ import numpy as np -from surfaces.templates import water, lava +from infinigen.assets.materials import water, lava -from fluid import duplication_geomod -from surfaces.templates import blackbody_shader, waterfall_material, smoke_material -from util.blender import deep_clone_obj -from util.logging import Timer +from infinigen.assets.fluid import duplication_geomod +from infinigen.assets.materials import blackbody_shader, waterfall_material, smoke_material +from infinigen.core.util.blender import deep_clone_obj +from infinigen.core.util.logging import Timer import gin -from util import blender as butil +from infinigen.core.util import blender as butil # find next available number for fluid cache folder def find_available_cache(cache_folder): diff --git a/infinigen/assets/fluid/fluid_scenecomp_additions.py b/infinigen/assets/fluid/fluid_scenecomp_additions.py index 070d28329..525bea209 100644 --- a/infinigen/assets/fluid/fluid_scenecomp_additions.py +++ b/infinigen/assets/fluid/fluid_scenecomp_additions.py @@ -5,21 +5,21 @@ import numpy as np from numpy.random import uniform, normal, randint -from util.pipeline import RandomStageExecutor -from placement import placement, density +from infinigen.core.util.pipeline import RandomStageExecutor +from infinigen.core.placement import placement, density -from fluid.cached_factory_wrappers import ( +from infinigen.assets.fluid.cached_factory_wrappers import ( CachedTreeFactory, CachedCreatureFactory, CachedBoulderFactory, CachedBushFactory, CachedCactusFactory ) -from fluid.asset_cache import FireCachingSystem -from fluid.fluid import is_fire_in_scene -from fluid.flip_fluid import create_flip_fluid_domain, set_flip_fluid_domain, create_flip_fluid_inflow, set_flip_fluid_obstacle, get_objs_inside_domain, make_beach, make_river, make_tilted_river +from infinigen.assets.fluid.asset_cache import FireCachingSystem +from infinigen.assets.fluid.fluid import is_fire_in_scene +from infinigen.assets.fluid.flip_fluid import create_flip_fluid_domain, set_flip_fluid_domain, create_flip_fluid_inflow, set_flip_fluid_obstacle, get_objs_inside_domain, make_beach, make_river, make_tilted_river -def fire_scenecomp_options(p: RandomStageExecutor, terrain_mesh, params, tree_species_params): +def cached_fire_scenecomp_options(p: RandomStageExecutor, terrain_mesh, params, tree_species_params): land_domain = params.get('land_domain_tags') underwater_domain = params.get('underwater_domain_tags') diff --git a/infinigen/assets/fluid/generate.py b/infinigen/assets/fluid/generate.py index 0bb10dccd..2988dfc72 100644 --- a/infinigen/assets/fluid/generate.py +++ b/infinigen/assets/fluid/generate.py @@ -5,19 +5,19 @@ import gin import bpy -from placement.factory import AssetFactory +from infinigen.core.placement.factory import AssetFactory -from util import blender as butil +from infinigen.core.util import blender as butil -from fluid.fluid import ( +from infinigen.assets.fluid.fluid import ( create_liquid_domain, create_liquid_flow, create_gas_domain, create_gas_flow, add_field, ) -from fluid.flip_fluid import ( +from infinigen.assets.fluid.flip_fluid import ( create_flip_fluid_domain, set_flip_fluid_domain, create_flip_fluid_inflow, @@ -25,7 +25,7 @@ get_objs_inside_domain, ) -from util.logging import Timer +from infinigen.core.util.logging import Timer @gin.configurable diff --git a/infinigen/assets/fluid/liquid_particle_material.py b/infinigen/assets/fluid/liquid_particle_material.py index 9180399eb..ab87bdfb1 100644 --- a/infinigen/assets/fluid/liquid_particle_material.py +++ b/infinigen/assets/fluid/liquid_particle_material.py @@ -6,10 +6,10 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface def liquid_particle_material(nw: NodeWrangler): # Code generated using version 2.5.1 of the node_transpiler diff --git a/infinigen/assets/fluid/run_asset_cache.py b/infinigen/assets/fluid/run_asset_cache.py index 5e6543777..834537f41 100644 --- a/infinigen/assets/fluid/run_asset_cache.py +++ b/infinigen/assets/fluid/run_asset_cache.py @@ -8,7 +8,7 @@ from pathlib import Path sys.path.append(os.getcwd()) -from fluid.asset_cache import FireCachingSystem +from infinigen.assets.fluid.asset_cache import FireCachingSystem try: from tools.asset_grid import import_surface_registry diff --git a/infinigen/assets/fruits/apple.py b/infinigen/assets/fruits/apple.py index c1ad325fa..6f6f9d46e 100644 --- a/infinigen/assets/fruits/apple.py +++ b/infinigen/assets/fruits/apple.py @@ -8,16 +8,16 @@ import mathutils import numpy as np from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category, hsv2rgba -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category, hsv2rgba +from infinigen.core import surface -from util.math import FixedSeed -from util import blender as butil -from placement.factory import AssetFactory +from infinigen.core.util.math import FixedSeed +from infinigen.core.util import blender as butil +from infinigen.core.placement.factory import AssetFactory -from assets.fruits.general_fruit import FruitFactoryGeneralFruit +from infinigen.assets.fruits.general_fruit import FruitFactoryGeneralFruit class FruitFactoryApple(FruitFactoryGeneralFruit): def __init__(self, factory_seed, scale=1.0, coarse=False): diff --git a/infinigen/assets/fruits/blackberry.py b/infinigen/assets/fruits/blackberry.py index d9b4de6bc..d0f977915 100644 --- a/infinigen/assets/fruits/blackberry.py +++ b/infinigen/assets/fruits/blackberry.py @@ -8,16 +8,16 @@ import mathutils import numpy as np from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category, hsv2rgba -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category, hsv2rgba +from infinigen.core import surface -from util.math import FixedSeed -from util import blender as butil -from placement.factory import AssetFactory +from infinigen.core.util.math import FixedSeed +from infinigen.core.util import blender as butil +from infinigen.core.placement.factory import AssetFactory -from assets.fruits.general_fruit import FruitFactoryGeneralFruit +from infinigen.assets.fruits.general_fruit import FruitFactoryGeneralFruit class FruitFactoryBlackberry(FruitFactoryGeneralFruit): def __init__(self, factory_seed, scale=1.0, coarse=False): diff --git a/infinigen/assets/fruits/coconutgreen.py b/infinigen/assets/fruits/coconutgreen.py index 1f34bfc03..7f1f2f57f 100644 --- a/infinigen/assets/fruits/coconutgreen.py +++ b/infinigen/assets/fruits/coconutgreen.py @@ -8,16 +8,16 @@ import mathutils import numpy as np from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category, hsv2rgba -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category, hsv2rgba +from infinigen.core import surface -from util.math import FixedSeed -from util import blender as butil -from placement.factory import AssetFactory +from infinigen.core.util.math import FixedSeed +from infinigen.core.util import blender as butil +from infinigen.core.placement.factory import AssetFactory -from assets.fruits.general_fruit import FruitFactoryGeneralFruit +from infinigen.assets.fruits.general_fruit import FruitFactoryGeneralFruit class FruitFactoryCoconutgreen(FruitFactoryGeneralFruit): def __init__(self, factory_seed, scale=1.0, coarse=False): diff --git a/infinigen/assets/fruits/coconuthairy.py b/infinigen/assets/fruits/coconuthairy.py index 1b81a7c94..daf3efbdb 100644 --- a/infinigen/assets/fruits/coconuthairy.py +++ b/infinigen/assets/fruits/coconuthairy.py @@ -8,16 +8,16 @@ import mathutils import numpy as np from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category, hsv2rgba -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category, hsv2rgba +from infinigen.core import surface -from util.math import FixedSeed -from util import blender as butil -from placement.factory import AssetFactory +from infinigen.core.util.math import FixedSeed +from infinigen.core.util import blender as butil +from infinigen.core.placement.factory import AssetFactory -from assets.fruits.general_fruit import FruitFactoryGeneralFruit +from infinigen.assets.fruits.general_fruit import FruitFactoryGeneralFruit class FruitFactoryCoconuthairy(FruitFactoryGeneralFruit): def __init__(self, factory_seed, scale=1.0, coarse=False): diff --git a/infinigen/assets/fruits/compositional_fruit.py b/infinigen/assets/fruits/compositional_fruit.py index 4c065bce8..c7557386a 100644 --- a/infinigen/assets/fruits/compositional_fruit.py +++ b/infinigen/assets/fruits/compositional_fruit.py @@ -8,24 +8,24 @@ import mathutils import numpy as np from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category, hsv2rgba -from surfaces import surface - -from util.math import FixedSeed -from util import blender as butil -from placement.factory import AssetFactory - -from assets.fruits.general_fruit import FruitFactoryGeneralFruit -from assets.fruits.apple import FruitFactoryApple -from assets.fruits.pineapple import FruitFactoryPineapple -from assets.fruits.starfruit import FruitFactoryStarfruit -from assets.fruits.strawberry import FruitFactoryStrawberry -from assets.fruits.blackberry import FruitFactoryBlackberry -from assets.fruits.coconuthairy import FruitFactoryCoconuthairy -from assets.fruits.coconutgreen import FruitFactoryCoconutgreen -from assets.fruits.durian import FruitFactoryDurian +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category, hsv2rgba +from infinigen.core import surface + +from infinigen.core.util.math import FixedSeed +from infinigen.core.util import blender as butil +from infinigen.core.placement.factory import AssetFactory + +from infinigen.assets.fruits.general_fruit import FruitFactoryGeneralFruit +from infinigen.assets.fruits.apple import FruitFactoryApple +from infinigen.assets.fruits.pineapple import FruitFactoryPineapple +from infinigen.assets.fruits.starfruit import FruitFactoryStarfruit +from infinigen.assets.fruits.strawberry import FruitFactoryStrawberry +from infinigen.assets.fruits.blackberry import FruitFactoryBlackberry +from infinigen.assets.fruits.coconuthairy import FruitFactoryCoconuthairy +from infinigen.assets.fruits.coconutgreen import FruitFactoryCoconutgreen +from infinigen.assets.fruits.durian import FruitFactoryDurian fruit_names = {'Apple': FruitFactoryApple, 'Pineapple': FruitFactoryPineapple, diff --git a/infinigen/assets/fruits/cross_section_lib.py b/infinigen/assets/fruits/cross_section_lib.py index 3b990d017..a3ec8dea8 100644 --- a/infinigen/assets/fruits/cross_section_lib.py +++ b/infinigen/assets/fruits/cross_section_lib.py @@ -7,12 +7,12 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.fruits.fruit_utils import nodegroup_rot_semmetry +from infinigen.assets.fruits.fruit_utils import nodegroup_rot_semmetry @node_utils.to_nodegroup('nodegroup_circle_cross_section', singleton=False, type='GeometryNodeTree') def nodegroup_circle_cross_section(nw: NodeWrangler): diff --git a/infinigen/assets/fruits/durian.py b/infinigen/assets/fruits/durian.py index 2b1cb59b0..92fd04d24 100644 --- a/infinigen/assets/fruits/durian.py +++ b/infinigen/assets/fruits/durian.py @@ -11,16 +11,16 @@ import numpy as np from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category, hsv2rgba -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category, hsv2rgba +from infinigen.core import surface -from util.math import FixedSeed -from util import blender as butil -from placement.factory import AssetFactory +from infinigen.core.util.math import FixedSeed +from infinigen.core.util import blender as butil +from infinigen.core.placement.factory import AssetFactory -from assets.fruits.general_fruit import FruitFactoryGeneralFruit +from infinigen.assets.fruits.general_fruit import FruitFactoryGeneralFruit @gin.register class FruitFactoryDurian(FruitFactoryGeneralFruit): diff --git a/infinigen/assets/fruits/fruit_utils.py b/infinigen/assets/fruits/fruit_utils.py index d5c0e4771..0e581208d 100644 --- a/infinigen/assets/fruits/fruit_utils.py +++ b/infinigen/assets/fruits/fruit_utils.py @@ -7,10 +7,10 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface @node_utils.to_nodegroup('nodegroup_random_rotation_scale', singleton=False, type='GeometryNodeTree') def nodegroup_random_rotation_scale(nw: NodeWrangler): diff --git a/infinigen/assets/fruits/general_fruit.py b/infinigen/assets/fruits/general_fruit.py index 2c569ffef..9e2e83c70 100644 --- a/infinigen/assets/fruits/general_fruit.py +++ b/infinigen/assets/fruits/general_fruit.py @@ -8,28 +8,28 @@ import mathutils import numpy as np from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category, hsv2rgba -from surfaces import surface - -from util.math import FixedSeed -from util import blender as butil -from placement.factory import AssetFactory - -from assets.fruits.fruit_utils import nodegroup_shape_quadratic, nodegroup_align_top_to_horizon -from assets.fruits.cross_section_lib import nodegroup_circle_cross_section, nodegroup_star_cross_section, nodegroup_coconut_cross_section -from assets.fruits.stem_lib import nodegroup_basic_stem, nodegroup_pineapple_stem, nodegroup_calyx_stem, nodegroup_empty_stem, nodegroup_coconut_stem - -from assets.fruits.surfaces.apple_surface import nodegroup_apple_surface -from assets.fruits.surfaces.pineapple_surface import nodegroup_pineapple_surface -from assets.fruits.surfaces.starfruit_surface import nodegroup_starfruit_surface -from assets.fruits.surfaces.strawberry_surface import nodegroup_strawberry_surface -from assets.fruits.surfaces.blackberry_surface import nodegroup_blackberry_surface -from assets.fruits.surfaces.coconuthairy_surface import nodegroup_coconuthairy_surface -from assets.fruits.surfaces.coconutgreen_surface import nodegroup_coconutgreen_surface -from assets.fruits.surfaces.durian_surface import nodegroup_durian_surface -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category, hsv2rgba +from infinigen.core import surface + +from infinigen.core.util.math import FixedSeed +from infinigen.core.util import blender as butil +from infinigen.core.placement.factory import AssetFactory + +from infinigen.assets.fruits.fruit_utils import nodegroup_shape_quadratic, nodegroup_align_top_to_horizon +from infinigen.assets.fruits.cross_section_lib import nodegroup_circle_cross_section, nodegroup_star_cross_section, nodegroup_coconut_cross_section +from infinigen.assets.fruits.stem_lib import nodegroup_basic_stem, nodegroup_pineapple_stem, nodegroup_calyx_stem, nodegroup_empty_stem, nodegroup_coconut_stem + +from infinigen.assets.fruits.surfaces.apple_surface import nodegroup_apple_surface +from infinigen.assets.fruits.surfaces.pineapple_surface import nodegroup_pineapple_surface +from infinigen.assets.fruits.surfaces.starfruit_surface import nodegroup_starfruit_surface +from infinigen.assets.fruits.surfaces.strawberry_surface import nodegroup_strawberry_surface +from infinigen.assets.fruits.surfaces.blackberry_surface import nodegroup_blackberry_surface +from infinigen.assets.fruits.surfaces.coconuthairy_surface import nodegroup_coconuthairy_surface +from infinigen.assets.fruits.surfaces.coconutgreen_surface import nodegroup_coconutgreen_surface +from infinigen.assets.fruits.surfaces.durian_surface import nodegroup_durian_surface +from infinigen.assets.utils.tag import tag_object, tag_nodegroup crosssectionlib = { 'circle_cross_section': nodegroup_circle_cross_section, diff --git a/infinigen/assets/fruits/pineapple.py b/infinigen/assets/fruits/pineapple.py index 62dde125a..7ade5d9b5 100644 --- a/infinigen/assets/fruits/pineapple.py +++ b/infinigen/assets/fruits/pineapple.py @@ -8,16 +8,16 @@ import mathutils import numpy as np from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category, hsv2rgba -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category, hsv2rgba +from infinigen.core import surface -from util.math import FixedSeed -from util import blender as butil -from placement.factory import AssetFactory +from infinigen.core.util.math import FixedSeed +from infinigen.core.util import blender as butil +from infinigen.core.placement.factory import AssetFactory -from assets.fruits.general_fruit import FruitFactoryGeneralFruit +from infinigen.assets.fruits.general_fruit import FruitFactoryGeneralFruit class FruitFactoryPineapple(FruitFactoryGeneralFruit): def __init__(self, factory_seed, scale=1.0, coarse=False): diff --git a/infinigen/assets/fruits/seed_lib.py b/infinigen/assets/fruits/seed_lib.py index 8be4c1716..79ca0c7f9 100644 --- a/infinigen/assets/fruits/seed_lib.py +++ b/infinigen/assets/fruits/seed_lib.py @@ -7,10 +7,10 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface def shader_seed_shader(nw: NodeWrangler): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/fruits/starfruit.py b/infinigen/assets/fruits/starfruit.py index 43f7675e5..575102f10 100644 --- a/infinigen/assets/fruits/starfruit.py +++ b/infinigen/assets/fruits/starfruit.py @@ -8,16 +8,16 @@ import mathutils import numpy as np from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category, hsv2rgba -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category, hsv2rgba +from infinigen.core import surface -from util.math import FixedSeed -from util import blender as butil -from placement.factory import AssetFactory +from infinigen.core.util.math import FixedSeed +from infinigen.core.util import blender as butil +from infinigen.core.placement.factory import AssetFactory -from assets.fruits.general_fruit import FruitFactoryGeneralFruit +from infinigen.assets.fruits.general_fruit import FruitFactoryGeneralFruit class FruitFactoryStarfruit(FruitFactoryGeneralFruit): def __init__(self, factory_seed, scale=1.0, coarse=False): diff --git a/infinigen/assets/fruits/stem_lib.py b/infinigen/assets/fruits/stem_lib.py index 11311300e..1d53dd7e4 100644 --- a/infinigen/assets/fruits/stem_lib.py +++ b/infinigen/assets/fruits/stem_lib.py @@ -7,13 +7,13 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.fruits.fruit_utils import nodegroup_surface_bump, nodegroup_add_noise_scalar, nodegroup_attach_to_nearest, nodegroup_scale_mesh -from assets.fruits.cross_section_lib import nodegroup_cylax_cross_section +from infinigen.assets.fruits.fruit_utils import nodegroup_surface_bump, nodegroup_add_noise_scalar, nodegroup_attach_to_nearest, nodegroup_scale_mesh +from infinigen.assets.fruits.cross_section_lib import nodegroup_cylax_cross_section @node_utils.to_nodegroup('nodegroup_empty_stem', singleton=False, type='GeometryNodeTree') def nodegroup_empty_stem(nw: NodeWrangler): diff --git a/infinigen/assets/fruits/strawberry.py b/infinigen/assets/fruits/strawberry.py index 849a1abba..ca2fc2511 100644 --- a/infinigen/assets/fruits/strawberry.py +++ b/infinigen/assets/fruits/strawberry.py @@ -8,16 +8,16 @@ import mathutils import numpy as np from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category, hsv2rgba -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category, hsv2rgba +from infinigen.core import surface -from util.math import FixedSeed -from util import blender as butil -from placement.factory import AssetFactory +from infinigen.core.util.math import FixedSeed +from infinigen.core.util import blender as butil +from infinigen.core.placement.factory import AssetFactory -from assets.fruits.general_fruit import FruitFactoryGeneralFruit +from infinigen.assets.fruits.general_fruit import FruitFactoryGeneralFruit class FruitFactoryStrawberry(FruitFactoryGeneralFruit): def __init__(self, factory_seed, scale=1.0, coarse=False): diff --git a/infinigen/assets/fruits/surfaces/apple_surface.py b/infinigen/assets/fruits/surfaces/apple_surface.py index 8181d2d6c..e05f1037b 100644 --- a/infinigen/assets/fruits/surfaces/apple_surface.py +++ b/infinigen/assets/fruits/surfaces/apple_surface.py @@ -7,12 +7,12 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.fruits.fruit_utils import nodegroup_add_dent +from infinigen.assets.fruits.fruit_utils import nodegroup_add_dent def shader_apple_shader(nw: NodeWrangler, color1, color2, random_seed): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/fruits/surfaces/blackberry_surface.py b/infinigen/assets/fruits/surfaces/blackberry_surface.py index d9e5b210c..4800f53e2 100644 --- a/infinigen/assets/fruits/surfaces/blackberry_surface.py +++ b/infinigen/assets/fruits/surfaces/blackberry_surface.py @@ -7,13 +7,13 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.fruits.fruit_utils import nodegroup_shape_quadratic, nodegroup_random_rotation_scale, nodegroup_surface_bump, nodegroup_point_on_mesh, nodegroup_instance_on_points -from assets.fruits.cross_section_lib import nodegroup_circle_cross_section +from infinigen.assets.fruits.fruit_utils import nodegroup_shape_quadratic, nodegroup_random_rotation_scale, nodegroup_surface_bump, nodegroup_point_on_mesh, nodegroup_instance_on_points +from infinigen.assets.fruits.cross_section_lib import nodegroup_circle_cross_section def shader_berry_shader(nw: NodeWrangler, berry_color): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/fruits/surfaces/coconutgreen_surface.py b/infinigen/assets/fruits/surfaces/coconutgreen_surface.py index 29d5579a9..a985a87a4 100644 --- a/infinigen/assets/fruits/surfaces/coconutgreen_surface.py +++ b/infinigen/assets/fruits/surfaces/coconutgreen_surface.py @@ -7,13 +7,13 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.fruits.fruit_utils import nodegroup_add_dent, nodegroup_surface_bump -from assets.fruits.surfaces.surface_utils import nodegroup_stripe_pattern +from infinigen.assets.fruits.fruit_utils import nodegroup_add_dent, nodegroup_surface_bump +from infinigen.assets.fruits.surfaces.surface_utils import nodegroup_stripe_pattern def shader_coconut_green_shader(nw: NodeWrangler, basic_color, bottom_color): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/fruits/surfaces/coconuthairy_surface.py b/infinigen/assets/fruits/surfaces/coconuthairy_surface.py index f71fb3606..d3339e047 100644 --- a/infinigen/assets/fruits/surfaces/coconuthairy_surface.py +++ b/infinigen/assets/fruits/surfaces/coconuthairy_surface.py @@ -7,12 +7,12 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.fruits.fruit_utils import nodegroup_point_on_mesh, nodegroup_random_rotation_scale, nodegroup_hair, nodegroup_instance_on_points +from infinigen.assets.fruits.fruit_utils import nodegroup_point_on_mesh, nodegroup_random_rotation_scale, nodegroup_hair, nodegroup_instance_on_points def shader_hair_shader(nw: NodeWrangler, basic_color): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/fruits/surfaces/durian_surface.py b/infinigen/assets/fruits/surfaces/durian_surface.py index ec3344116..1eb798352 100644 --- a/infinigen/assets/fruits/surfaces/durian_surface.py +++ b/infinigen/assets/fruits/surfaces/durian_surface.py @@ -7,12 +7,12 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.fruits.fruit_utils import nodegroup_manhattan, nodegroup_point_on_mesh, nodegroup_surface_bump +from infinigen.assets.fruits.fruit_utils import nodegroup_manhattan, nodegroup_point_on_mesh, nodegroup_surface_bump def shader_durian_shader(nw: NodeWrangler, peak_color, base_color): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/fruits/surfaces/pineapple_surface.py b/infinigen/assets/fruits/surfaces/pineapple_surface.py index 4a973430d..507f475e9 100644 --- a/infinigen/assets/fruits/surfaces/pineapple_surface.py +++ b/infinigen/assets/fruits/surfaces/pineapple_surface.py @@ -7,14 +7,14 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.fruits.fruit_utils import nodegroup_point_on_mesh, nodegroup_random_rotation_scale, nodegroup_surface_bump, nodegroup_instance_on_points -from assets.fruits.cross_section_lib import nodegroup_circle_cross_section -from assets.fruits.stem_lib import nodegroup_pineapple_leaf +from infinigen.assets.fruits.fruit_utils import nodegroup_point_on_mesh, nodegroup_random_rotation_scale, nodegroup_surface_bump, nodegroup_instance_on_points +from infinigen.assets.fruits.cross_section_lib import nodegroup_circle_cross_section +from infinigen.assets.fruits.stem_lib import nodegroup_pineapple_leaf @node_utils.to_nodegroup('nodegroup_pineapple_surface', singleton=False, type='GeometryNodeTree') def nodegroup_pineapple_surface(nw: NodeWrangler, diff --git a/infinigen/assets/fruits/surfaces/starfruit_surface.py b/infinigen/assets/fruits/surfaces/starfruit_surface.py index 7fbd47a71..dc77bdff8 100644 --- a/infinigen/assets/fruits/surfaces/starfruit_surface.py +++ b/infinigen/assets/fruits/surfaces/starfruit_surface.py @@ -7,12 +7,12 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.fruits.fruit_utils import nodegroup_surface_bump, nodegroup_add_dent +from infinigen.assets.fruits.fruit_utils import nodegroup_surface_bump, nodegroup_add_dent def shader_starfruit_shader(nw: NodeWrangler, base_color, ridge_color): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/fruits/surfaces/strawberry_surface.py b/infinigen/assets/fruits/surfaces/strawberry_surface.py index 1239cc3ad..cd4a8b979 100644 --- a/infinigen/assets/fruits/surfaces/strawberry_surface.py +++ b/infinigen/assets/fruits/surfaces/strawberry_surface.py @@ -7,13 +7,13 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.fruits.seed_lib import nodegroup_strawberry_seed -from assets.fruits.fruit_utils import nodegroup_point_on_mesh, nodegroup_add_crater, nodegroup_surface_bump, nodegroup_random_rotation_scale, nodegroup_instance_on_points, nodegroup_add_noise_scalar +from infinigen.assets.fruits.seed_lib import nodegroup_strawberry_seed +from infinigen.assets.fruits.fruit_utils import nodegroup_point_on_mesh, nodegroup_add_crater, nodegroup_surface_bump, nodegroup_random_rotation_scale, nodegroup_instance_on_points, nodegroup_add_noise_scalar def shader_strawberry_shader(nw: NodeWrangler, top_pos, main_color, top_color): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/fruits/surfaces/surface_utils.py b/infinigen/assets/fruits/surfaces/surface_utils.py index 5658259b9..6fc88e03e 100644 --- a/infinigen/assets/fruits/surfaces/surface_utils.py +++ b/infinigen/assets/fruits/surfaces/surface_utils.py @@ -7,10 +7,10 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface @node_utils.to_nodegroup('nodegroup_stripe_pattern', singleton=False, type='ShaderNodeTree') def nodegroup_stripe_pattern(nw: NodeWrangler): diff --git a/infinigen/assets/grassland/dandelion.py b/infinigen/assets/grassland/dandelion.py index 717dd641a..db29e4ec7 100644 --- a/infinigen/assets/grassland/dandelion.py +++ b/infinigen/assets/grassland/dandelion.py @@ -7,16 +7,16 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from surfaces import surface -from surfaces.templates import simple_greenery -from surfaces.templates import simple_whitish -from surfaces.templates import simple_brownish -from placement.factory import AssetFactory +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core import surface +from infinigen.assets.materials import simple_greenery +from infinigen.assets.materials import simple_whitish +from infinigen.assets.materials import simple_brownish +from infinigen.core.placement.factory import AssetFactory import numpy as np -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup @node_utils.to_nodegroup('nodegroup_pedal_stem_head_geometry', singleton=False, type='GeometryNodeTree') diff --git a/infinigen/assets/grassland/flower.py b/infinigen/assets/grassland/flower.py index 6561174ad..9b873da84 100644 --- a/infinigen/assets/grassland/flower.py +++ b/infinigen/assets/grassland/flower.py @@ -10,14 +10,14 @@ from numpy.random import uniform, normal import numpy as np -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils, color -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils, color +from infinigen.core import surface -from placement.factory import AssetFactory -from util import blender as butil -from util.math import FixedSeed, dict_lerp -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.placement.factory import AssetFactory +from infinigen.core.util import blender as butil +from infinigen.core.util.math import FixedSeed, dict_lerp +from infinigen.assets.utils.tag import tag_object, tag_nodegroup @node_utils.to_nodegroup('nodegroup_polar_to_cart_old', singleton=True) def nodegroup_polar_to_cart_old(nw): diff --git a/infinigen/assets/grassland/flowerplant.py b/infinigen/assets/grassland/flowerplant.py index 3a36a9ebc..900022480 100644 --- a/infinigen/assets/grassland/flowerplant.py +++ b/infinigen/assets/grassland/flowerplant.py @@ -8,17 +8,17 @@ import mathutils from numpy.random import uniform, normal, randint from infinigen.assets.grassland.flower import FlowerFactory -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category import numpy as np -from surfaces import surface -from surfaces.templates import simple_greenery -from assets.small_plants import leaf_general as Leaf +from infinigen.core import surface +from infinigen.assets.materials import simple_greenery +from infinigen.assets.small_plants import leaf_general as Leaf from infinigen.assets.grassland import flower as Flower -from placement.factory import AssetFactory -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.placement.factory import AssetFactory +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup @node_utils.to_nodegroup('nodegroup_stem_branch_leaf_s_r', singleton=False, type='GeometryNodeTree') diff --git a/infinigen/assets/grassland/grass_tuft.py b/infinigen/assets/grassland/grass_tuft.py index d5d645d30..6f5c9dc24 100644 --- a/infinigen/assets/grassland/grass_tuft.py +++ b/infinigen/assets/grassland/grass_tuft.py @@ -9,15 +9,15 @@ import numpy as np from numpy.random import uniform, normal -from assets.creatures.geometry.curve import Curve -from util.blender import deep_clone_obj +from infinigen.assets.creatures.util.geometry.curve import Curve +from infinigen.core.util.blender import deep_clone_obj -from surfaces.templates import grass_blade_texture +from infinigen.assets.materials import grass_blade_texture -from placement.factory import AssetFactory +from infinigen.core.placement.factory import AssetFactory -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class GrassTuftFactory(AssetFactory): diff --git a/infinigen/assets/leaves/leaf.py b/infinigen/assets/leaves/leaf.py index 2d389a610..6335ca57b 100644 --- a/infinigen/assets/leaves/leaf.py +++ b/infinigen/assets/leaves/leaf.py @@ -11,11 +11,11 @@ import bpy from mathutils import Vector, Matrix -from assets.trees.utils import helper, mesh, materials +from infinigen.assets.trees.utils import helper, mesh, materials -from placement.factory import AssetFactory -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.placement.factory import AssetFactory +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup C = bpy.context D = bpy.data diff --git a/infinigen/assets/leaves/leaf_broadleaf.py b/infinigen/assets/leaves/leaf_broadleaf.py index ad7a90390..c87e72a0c 100644 --- a/infinigen/assets/leaves/leaf_broadleaf.py +++ b/infinigen/assets/leaves/leaf_broadleaf.py @@ -8,17 +8,17 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category, hsv2rgba -from surfaces import surface -from assets.leaves.leaf_v2 import nodegroup_apply_wave, nodegroup_move_to_origin -from assets.leaves.leaf_maple import nodegroup_leaf_shader - -from util.math import FixedSeed -from placement.factory import AssetFactory -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category, hsv2rgba +from infinigen.core import surface +from infinigen.assets.leaves.leaf_v2 import nodegroup_apply_wave, nodegroup_move_to_origin +from infinigen.assets.leaves.leaf_maple import nodegroup_leaf_shader + +from infinigen.core.util.math import FixedSeed +from infinigen.core.placement.factory import AssetFactory +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup @node_utils.to_nodegroup('nodegroup_random_mask_vein', singleton=False, type='GeometryNodeTree') diff --git a/infinigen/assets/leaves/leaf_ginko.py b/infinigen/assets/leaves/leaf_ginko.py index c7f1905db..de8199f53 100644 --- a/infinigen/assets/leaves/leaf_ginko.py +++ b/infinigen/assets/leaves/leaf_ginko.py @@ -8,17 +8,17 @@ import mathutils import numpy as np from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category, hsv2rgba -from surfaces import surface -from assets.leaves.leaf_v2 import nodegroup_move_to_origin, nodegroup_apply_wave -from assets.leaves.leaf_maple import nodegroup_leaf_shader - -from util.math import FixedSeed -from placement.factory import AssetFactory -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category, hsv2rgba +from infinigen.core import surface +from infinigen.assets.leaves.leaf_v2 import nodegroup_move_to_origin, nodegroup_apply_wave +from infinigen.assets.leaves.leaf_maple import nodegroup_leaf_shader + +from infinigen.core.util.math import FixedSeed +from infinigen.core.placement.factory import AssetFactory +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup def deg2rad(deg): return deg / 180.0 * np.pi diff --git a/infinigen/assets/leaves/leaf_maple.py b/infinigen/assets/leaves/leaf_maple.py index cca2df8ca..6b9fa256c 100644 --- a/infinigen/assets/leaves/leaf_maple.py +++ b/infinigen/assets/leaves/leaf_maple.py @@ -9,16 +9,16 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category, hsv2rgba -from surfaces import surface -from assets.leaves.leaf_v2 import nodegroup_apply_wave - -from util.math import FixedSeed -from placement.factory import AssetFactory -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category, hsv2rgba +from infinigen.core import surface +from infinigen.assets.leaves.leaf_v2 import nodegroup_apply_wave + +from infinigen.core.util.math import FixedSeed +from infinigen.core.placement.factory import AssetFactory +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup def deg2rad(deg): return deg / 180.0 * np.pi diff --git a/infinigen/assets/leaves/leaf_pine.py b/infinigen/assets/leaves/leaf_pine.py index d9da403bd..929ffbfb1 100644 --- a/infinigen/assets/leaves/leaf_pine.py +++ b/infinigen/assets/leaves/leaf_pine.py @@ -8,15 +8,15 @@ import bpy import mathutils from numpy.random import uniform, normal -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface - -from util.math import FixedSeed -from placement.factory import AssetFactory -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface + +from infinigen.core.util.math import FixedSeed +from infinigen.core.placement.factory import AssetFactory +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup ######## code for creating pine needles ######## diff --git a/infinigen/assets/leaves/leaf_v2.py b/infinigen/assets/leaves/leaf_v2.py index d9cd9b5c7..f85e50d0e 100644 --- a/infinigen/assets/leaves/leaf_v2.py +++ b/infinigen/assets/leaves/leaf_v2.py @@ -12,24 +12,24 @@ import bpy -from surfaces import surface -from nodes import node_utils -from nodes.node_wrangler import Nodes +from infinigen.core import surface +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.node_wrangler import Nodes -from util.math import FixedSeed -from placement.factory import AssetFactory -from util import blender as butil -from nodes.color import color_category +from infinigen.core.util.math import FixedSeed +from infinigen.core.placement.factory import AssetFactory +from infinigen.core.util import blender as butil +from infinigen.core.nodes.color import color_category import bpy import mathutils from numpy.random import uniform, normal -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface +from infinigen.assets.utils.tag import tag_object, tag_nodegroup @node_utils.to_nodegroup('shader_nodegroup_sub_vein', singleton=False, type='ShaderNodeTree') def shader_nodegroup_sub_vein(nw): diff --git a/infinigen/assets/leaves/leaf_wrapped.py b/infinigen/assets/leaves/leaf_wrapped.py index 186b6baf8..b43a990c3 100644 --- a/infinigen/assets/leaves/leaf_wrapped.py +++ b/infinigen/assets/leaves/leaf_wrapped.py @@ -8,15 +8,15 @@ import mathutils import numpy as np from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.leaves.leaf_maple import LeafFactoryMaple -from assets.leaves.leaf_broadleaf import LeafFactoryBroadleaf -from assets.leaves.leaf_ginko import LeafFactoryGinko -from placement.factory import AssetFactory +from infinigen.assets.leaves.leaf_maple import LeafFactoryMaple +from infinigen.assets.leaves.leaf_broadleaf import LeafFactoryBroadleaf +from infinigen.assets.leaves.leaf_ginko import LeafFactoryGinko +from infinigen.core.placement.factory import AssetFactory def nodegroup_nodegroup_apply_wrap(nw: NodeWrangler, **kwargs): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/lighting/caustics_lamp.py b/infinigen/assets/lighting/caustics_lamp.py index 728e77a9e..3533c7fe1 100644 --- a/infinigen/assets/lighting/caustics_lamp.py +++ b/infinigen/assets/lighting/caustics_lamp.py @@ -11,13 +11,13 @@ from numpy.random import uniform as U, normal as N, randint, uniform import numpy as np -from assets.utils.misc import log_uniform -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from placement import placement -from placement.placement import placeholder_locs -from util.math import FixedSeed -from placement.factory import AssetFactory +from infinigen.assets.utils.misc import log_uniform +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.placement import placement +from infinigen.core.placement.placement import placeholder_locs +from infinigen.core.util.math import FixedSeed +from infinigen.core.placement.factory import AssetFactory @node_utils.to_nodegroup('nodegroup_caustics', singleton=False, type='ShaderNodeTree') diff --git a/infinigen/assets/lighting/glowing_rocks.py b/infinigen/assets/lighting/glowing_rocks.py index 5c7cc5195..f95bf871e 100644 --- a/infinigen/assets/lighting/glowing_rocks.py +++ b/infinigen/assets/lighting/glowing_rocks.py @@ -7,14 +7,14 @@ import bpy import gin import numpy as np -from util import blender as butil +from infinigen.core.util import blender as butil -from nodes.node_wrangler import Nodes, NodeWrangler -from placement.factory import AssetFactory, make_asset_collection -from surfaces.scatters.rocks import BlenderRockFactory -from surfaces import surface -from nodes.color import color_category -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.placement.factory import AssetFactory, make_asset_collection +from infinigen.assets.rocks.blender_rock import BlenderRockFactory +from infinigen.core import surface +from infinigen.core.nodes.color import color_category +from infinigen.assets.utils.tag import tag_object, tag_nodegroup def shader_glowrock(nw: NodeWrangler, transparent_for_bounce=True): object_info = nw.new_node(Nodes.ObjectInfo_Shader) diff --git a/infinigen/assets/lighting/lighting.py b/infinigen/assets/lighting/sky_lighting.py similarity index 94% rename from infinigen/assets/lighting/lighting.py rename to infinigen/assets/lighting/sky_lighting.py index b0a68c1f1..1249bfb61 100644 --- a/infinigen/assets/lighting/lighting.py +++ b/infinigen/assets/lighting/sky_lighting.py @@ -8,11 +8,11 @@ import math import numpy as np import gin -from util.random import random_general as rg +from infinigen.core.util.random import random_general as rg from numpy.random import uniform -from nodes.node_wrangler import Nodes, NodeWrangler -from util.math import clip_gaussian +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.util.math import clip_gaussian @gin.configurable def nishita_lighting( diff --git a/infinigen/assets/materials/__init__.py b/infinigen/assets/materials/__init__.py new file mode 100644 index 000000000..89abe7d35 --- /dev/null +++ b/infinigen/assets/materials/__init__.py @@ -0,0 +1,2 @@ +from . import * +from infinigen.infinigen_gpl.surfaces import * diff --git a/infinigen/assets/surfaces/aluminumdisp2tut.py b/infinigen/assets/materials/aluminumdisp2tut.py similarity index 96% rename from infinigen/assets/surfaces/aluminumdisp2tut.py rename to infinigen/assets/materials/aluminumdisp2tut.py index 018524852..c71fff9ba 100644 --- a/infinigen/assets/surfaces/aluminumdisp2tut.py +++ b/infinigen/assets/materials/aluminumdisp2tut.py @@ -7,14 +7,16 @@ import os, sys import numpy as np import math as ma -from surfaces.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface + +from infinigen.assets.materials.utils.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category + +from infinigen.core import surface def shader_aluminumdisp2tut(nw: NodeWrangler, rand=False, **input_kwargs): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/surfaces/atmosphere_light_haze.py b/infinigen/assets/materials/atmosphere_light_haze.py similarity index 81% rename from infinigen/assets/surfaces/atmosphere_light_haze.py rename to infinigen/assets/materials/atmosphere_light_haze.py index 3ae91410d..005140866 100644 --- a/infinigen/assets/surfaces/atmosphere_light_haze.py +++ b/infinigen/assets/materials/atmosphere_light_haze.py @@ -7,10 +7,11 @@ import numpy as np from numpy.random import uniform import gin -from util.random import random_general as rg -from nodes.node_wrangler import Nodes -from nodes import color -from surfaces import surface + +from infinigen.core.util.random import random_general as rg +from infinigen.core.nodes.node_wrangler import Nodes +from infinigen.core.nodes import color +from infinigen.core import surface type = None diff --git a/infinigen/assets/surfaces/bark.py b/infinigen/assets/materials/bark.py similarity index 96% rename from infinigen/assets/surfaces/bark.py rename to infinigen/assets/materials/bark.py index d4f3e3584..a35430db2 100644 --- a/infinigen/assets/surfaces/bark.py +++ b/infinigen/assets/materials/bark.py @@ -6,12 +6,12 @@ import os, sys import numpy as np import math as ma -from surfaces.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise +from infinigen.assets.materials.utils.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise import bpy import mathutils from numpy.random import uniform, normal -from nodes.node_wrangler import Nodes, NodeWrangler -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core import surface import random diff --git a/infinigen/assets/surfaces/bark_birch.py b/infinigen/assets/materials/bark_birch.py similarity index 98% rename from infinigen/assets/surfaces/bark_birch.py rename to infinigen/assets/materials/bark_birch.py index bd28d32c5..0712bc020 100644 --- a/infinigen/assets/surfaces/bark_birch.py +++ b/infinigen/assets/materials/bark_birch.py @@ -8,9 +8,9 @@ import bpy import mathutils from numpy.random import uniform, normal -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core import surface from .bark_random import nodegroup_apply_geo_matv2, nodegroup_shader_canonical_coord, nodegroup_canonical_coord diff --git a/infinigen/assets/surfaces/bark_random.py b/infinigen/assets/materials/bark_random.py similarity index 99% rename from infinigen/assets/surfaces/bark_random.py rename to infinigen/assets/materials/bark_random.py index 52204677d..72af3d2aa 100644 --- a/infinigen/assets/surfaces/bark_random.py +++ b/infinigen/assets/materials/bark_random.py @@ -9,12 +9,12 @@ import bpy import mathutils from numpy.random import uniform, normal -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core import surface import numpy as np -from util.math import FixedSeed +from infinigen.core.util.math import FixedSeed @node_utils.to_nodegroup('nodegroup_calc_radius', singleton=True, type='GeometryNodeTree') def nodegroup_calc_radius(nw): diff --git a/infinigen/assets/surfaces/basic_bsdf.py b/infinigen/assets/materials/basic_bsdf.py similarity index 87% rename from infinigen/assets/surfaces/basic_bsdf.py rename to infinigen/assets/materials/basic_bsdf.py index 0edb42fe5..9a2fbe580 100644 --- a/infinigen/assets/surfaces/basic_bsdf.py +++ b/infinigen/assets/materials/basic_bsdf.py @@ -10,9 +10,9 @@ import numpy as np from numpy.random import uniform, normal -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes.color import hsv2rgba -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes.color import hsv2rgba +from infinigen.core import surface def shader_basic_bsdf(nw): diff --git a/infinigen/assets/surfaces/beak.py b/infinigen/assets/materials/beak.py similarity index 92% rename from infinigen/assets/surfaces/beak.py rename to infinigen/assets/materials/beak.py index dcd42b838..ce2db642f 100644 --- a/infinigen/assets/surfaces/beak.py +++ b/infinigen/assets/materials/beak.py @@ -7,10 +7,10 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface def orange(): r = uniform(205 / 255, 1) diff --git a/infinigen/assets/surfaces/bird.py b/infinigen/assets/materials/bird.py similarity index 98% rename from infinigen/assets/surfaces/bird.py rename to infinigen/assets/materials/bird.py index fb6f22036..09280fc21 100644 --- a/infinigen/assets/surfaces/bird.py +++ b/infinigen/assets/materials/bird.py @@ -7,14 +7,14 @@ import os, sys import numpy as np import math as ma -from surfaces.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise +from infinigen.assets.materials.utils.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface import random diff --git a/infinigen/assets/surfaces/blackbody_shader.py b/infinigen/assets/materials/blackbody_shader.py similarity index 90% rename from infinigen/assets/surfaces/blackbody_shader.py rename to infinigen/assets/materials/blackbody_shader.py index 63e33eaef..b57611765 100644 --- a/infinigen/assets/surfaces/blackbody_shader.py +++ b/infinigen/assets/materials/blackbody_shader.py @@ -7,11 +7,11 @@ import bpy import mathutils from numpy.random import uniform, normal as N, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface -from util.random import random_color_neighbour +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface +from infinigen.core.util.random import random_color_neighbour diff --git a/infinigen/assets/surfaces/bone.py b/infinigen/assets/materials/bone.py similarity index 95% rename from infinigen/assets/surfaces/bone.py rename to infinigen/assets/materials/bone.py index a8704d3cb..c956d41d6 100644 --- a/infinigen/assets/surfaces/bone.py +++ b/infinigen/assets/materials/bone.py @@ -7,10 +7,10 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface def shader_bone(nw: NodeWrangler): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/surfaces/chitin.py b/infinigen/assets/materials/chitin.py similarity index 96% rename from infinigen/assets/surfaces/chitin.py rename to infinigen/assets/materials/chitin.py index b71c3fab4..7347fafa5 100644 --- a/infinigen/assets/surfaces/chitin.py +++ b/infinigen/assets/materials/chitin.py @@ -7,14 +7,14 @@ import os, sys import numpy as np import math as ma -from surfaces.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise +from infinigen.assets.materials.utils.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category, hsv2rgba -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category, hsv2rgba +from infinigen.core import surface def shader_chitin(nw: NodeWrangler, rand=True, **input_kwargs): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/surfaces/chunkyrock.py b/infinigen/assets/materials/chunkyrock.py similarity index 94% rename from infinigen/assets/surfaces/chunkyrock.py rename to infinigen/assets/materials/chunkyrock.py index 5838adc89..2e0b3f2f2 100644 --- a/infinigen/assets/surfaces/chunkyrock.py +++ b/infinigen/assets/materials/chunkyrock.py @@ -11,13 +11,13 @@ import mathutils from numpy.random import uniform, normal, randint import gin -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface -from surfaces.surface_utils import sample_color, sample_range, sample_ratio -from util.organization import SurfaceTypes -from util.math import FixedSeed +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface +from infinigen.assets.materials.utils.surface_utils import sample_color, sample_range, sample_ratio +from infinigen.core.util.organization import SurfaceTypes +from infinigen.core.util.math import FixedSeed from .mountain import geo_MOUNTAIN_general diff --git a/infinigen/assets/surfaces/cobble_stone.py b/infinigen/assets/materials/cobble_stone.py similarity index 96% rename from infinigen/assets/surfaces/cobble_stone.py rename to infinigen/assets/materials/cobble_stone.py index 7bbc40d3d..c50e9d30c 100644 --- a/infinigen/assets/surfaces/cobble_stone.py +++ b/infinigen/assets/materials/cobble_stone.py @@ -6,11 +6,11 @@ from numpy.random import uniform as U, normal as N -from nodes.node_wrangler import Nodes, NodeWrangler -from surfaces import surface -from util.random import random_color_neighbour -from util.organization import SurfaceTypes -from util.math import FixedSeed +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core import surface +from infinigen.core.util.random import random_color_neighbour +from infinigen.core.util.organization import SurfaceTypes +from infinigen.core.util.math import FixedSeed import gin type = SurfaceTypes.SDFPerturb diff --git a/infinigen/assets/surfaces/cracked_ground.py b/infinigen/assets/materials/cracked_ground.py similarity index 96% rename from infinigen/assets/surfaces/cracked_ground.py rename to infinigen/assets/materials/cracked_ground.py index 730b462af..011ddb965 100644 --- a/infinigen/assets/surfaces/cracked_ground.py +++ b/infinigen/assets/materials/cracked_ground.py @@ -8,15 +8,15 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface -from util.organization import SurfaceTypes +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface +from infinigen.core.util.organization import SurfaceTypes import gin -from util.math import FixedSeed -from util.random import random_color_neighbour +from infinigen.core.util.math import FixedSeed +from infinigen.core.util.random import random_color_neighbour type = SurfaceTypes.SDFPerturb mod_name = "geo_cracked_ground" diff --git a/infinigen/assets/surfaces/dirt.py b/infinigen/assets/materials/dirt.py similarity index 97% rename from infinigen/assets/surfaces/dirt.py rename to infinigen/assets/materials/dirt.py index 9f1bc4c89..27f872ded 100644 --- a/infinigen/assets/surfaces/dirt.py +++ b/infinigen/assets/materials/dirt.py @@ -8,12 +8,12 @@ import bpy import gin -from nodes.node_wrangler import Nodes +from infinigen.core.nodes.node_wrangler import Nodes from numpy.random import uniform -from surfaces import surface -from surfaces.surface_utils import sample_color, sample_ratio -from util.organization import SurfaceTypes -from util.math import FixedSeed +from infinigen.core import surface +from infinigen.assets.materials.utils.surface_utils import sample_color, sample_ratio +from infinigen.core.util.organization import SurfaceTypes +from infinigen.core.util.math import FixedSeed from .mountain import geo_MOUNTAIN_general diff --git a/infinigen/assets/surfaces/eyeball.py b/infinigen/assets/materials/eyeball.py similarity index 92% rename from infinigen/assets/surfaces/eyeball.py rename to infinigen/assets/materials/eyeball.py index 18753ec11..658c17523 100644 --- a/infinigen/assets/surfaces/eyeball.py +++ b/infinigen/assets/materials/eyeball.py @@ -7,11 +7,11 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface -from surfaces.surface_utils import clip, sample_range, sample_ratio, sample_color +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface +from infinigen.assets.materials.utils.surface_utils import clip, sample_range, sample_ratio, sample_color def shader_eyeball(nw: NodeWrangler, rand=True, coord="X", **input_kwargs): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/surfaces/face_size_visualizer.py b/infinigen/assets/materials/face_size_visualizer.py similarity index 88% rename from infinigen/assets/surfaces/face_size_visualizer.py rename to infinigen/assets/materials/face_size_visualizer.py index 1a947051d..af8f3f02b 100644 --- a/infinigen/assets/surfaces/face_size_visualizer.py +++ b/infinigen/assets/materials/face_size_visualizer.py @@ -7,10 +7,10 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface def shader_material(nw: NodeWrangler): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/surfaces/fish_eye_shader.py b/infinigen/assets/materials/fish_eye_shader.py similarity index 97% rename from infinigen/assets/surfaces/fish_eye_shader.py rename to infinigen/assets/materials/fish_eye_shader.py index c94affdf5..33b17690e 100644 --- a/infinigen/assets/surfaces/fish_eye_shader.py +++ b/infinigen/assets/materials/fish_eye_shader.py @@ -7,14 +7,14 @@ import os, sys import numpy as np import math as ma -from surfaces.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise +from infinigen.assets.materials.utils.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise import bpy import mathutils from numpy.random import uniform as U, normal as N, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface @node_utils.to_nodegroup('nodegroup_rotate2_d_002', singleton=False, type='ShaderNodeTree') def nodegroup_rotate2_d_002(nw: NodeWrangler, rand=True, **input_kwargs): diff --git a/infinigen/assets/surfaces/fishbody.py b/infinigen/assets/materials/fishbody.py similarity index 99% rename from infinigen/assets/surfaces/fishbody.py rename to infinigen/assets/materials/fishbody.py index 1a4f0ebf7..eb29950bf 100644 --- a/infinigen/assets/surfaces/fishbody.py +++ b/infinigen/assets/materials/fishbody.py @@ -8,14 +8,14 @@ import os, sys, random import numpy as np import math as ma -from surfaces.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise +from infinigen.assets.materials.utils.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise import bpy import mathutils from numpy.random import uniform as U, normal as N, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface @node_utils.to_nodegroup('nodegroup_node_grid', singleton=False, type='GeometryNodeTree') diff --git a/infinigen/assets/surfaces/fishfin.py b/infinigen/assets/materials/fishfin.py similarity index 77% rename from infinigen/assets/surfaces/fishfin.py rename to infinigen/assets/materials/fishfin.py index f16043ead..862beef70 100644 --- a/infinigen/assets/surfaces/fishfin.py +++ b/infinigen/assets/materials/fishfin.py @@ -7,14 +7,14 @@ import os, sys import numpy as np import math as ma -from surfaces.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise +from infinigen.assets.materials.utils.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface import random def shader_fin_regular(nw: NodeWrangler, rand=True, **input_kwargs): @@ -195,74 +195,4 @@ def apply(obj, geo_kwargs={}, shader_kwargs={}, **kwargs): shader = shader_fin_gold else: shader = shader_fin_regular - surface.add_material(obj, shader, input_kwargs=shader_kwargs) - -if __name__ == "__main__": - - for i in range(1): - bpy.ops.wm.open_mainfile(filepath='dev_scene_test_fish_nurb2.blend') - #i = 0 - #for obj in bpy.data.objects: - # if obj.name.find('Nurb') >= 0: - # apply(obj, geo_kwargs={'rand': True}, shader_kwargs={'rand': True, 'goldfish':i%2==0}) - # i += 1 - apply(bpy.data.objects['Sphere'], geo_kwargs={'rand': True}, shader_kwargs={'rand': True, 'goldfish':True}) - apply(bpy.data.objects['Sphere.001'], geo_kwargs={'rand': True}, shader_kwargs={'rand': True, 'goldfish':False}) - fn = os.path.join(os.path.abspath(os.curdir), 'dev_scene_test_fishfin.blend') - bpy.ops.wm.save_as_mainfile(filepath=fn) - ''' - import bpy - from pathlib import Path - import sys, importlib - import numpy as np - - pwd = Path(bpy.data.filepath).parent - if not str(pwd) in sys.path: - sys.path.append(str(pwd)) - - import gin - gin.clear_config() - gin.enter_interactive_mode() - - import generate - gin.parse_config_files_and_bindings(['config/base.gin'], []) - from surfaces.surface import registry - registry.initialize_from_gin() - - from assets.creatures.tools import dev_script - - np.random.seed(1) - - from types import ModuleType - from importlib import reload - import os, sys - - from util.dev import rreload - from assets.creatures import generate - from util import blender - - rreload(generate, 'worldgen') - - from surfaces.surface import registry - gin.parse_config_files_and_bindings(['config/base.gin'], []) - registry.initialize_from_gin() - - blender.clear_scene(keep=['Camera', 'UV', 'Plane', 'Reference', 'Example', 'Dev', 'duck', 'shader_tiger_tuned', 'shader_tiger_tuned_hair']) - - get_factory = lambda _: generate.CreatureFactory(np.random.randint(1e5)) - dev_script.main(get_factory=get_factory, species=4, n=1, one_row=False, spacing=1, - join=True, - remesh=True, - rigging=False, - pose=False, - constraints=False, - animation=False, - materials=False, - skin_sim=False, - particles=False, - smooth_attrs=False - ) - ''' - - - + surface.add_material(obj, shader, input_kwargs=shader_kwargs) \ No newline at end of file diff --git a/infinigen/assets/surfaces/giraffe_attr.py b/infinigen/assets/materials/giraffe_attr.py similarity index 90% rename from infinigen/assets/surfaces/giraffe_attr.py rename to infinigen/assets/materials/giraffe_attr.py index 5d15817df..8e46eeb6b 100644 --- a/infinigen/assets/surfaces/giraffe_attr.py +++ b/infinigen/assets/materials/giraffe_attr.py @@ -7,16 +7,16 @@ import os, sys import numpy as np import math as ma -from surfaces.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise +from infinigen.assets.materials.utils.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise import bpy import mathutils from numpy.random import uniform as U, normal as N, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category, hsv2rgba -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category, hsv2rgba +from infinigen.core import surface -from assets.creatures.nodegroups.shader import nodegroup_color_mask +from infinigen.assets.creatures.util.nodegroups.shader import nodegroup_color_mask def shader_giraffe_attr(nw: NodeWrangler, rand=True, **input_kwargs): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/surfaces/grass_blade_texture.py b/infinigen/assets/materials/grass_blade_texture.py similarity index 97% rename from infinigen/assets/surfaces/grass_blade_texture.py rename to infinigen/assets/materials/grass_blade_texture.py index c94b4c610..27ce9653e 100644 --- a/infinigen/assets/surfaces/grass_blade_texture.py +++ b/infinigen/assets/materials/grass_blade_texture.py @@ -7,10 +7,10 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface import numpy as np pallete1 = [ ((0.2632, 0.1493, 0.0558, 1.0), 0.0), diff --git a/infinigen/assets/surfaces/horn.py b/infinigen/assets/materials/horn.py similarity index 94% rename from infinigen/assets/surfaces/horn.py rename to infinigen/assets/materials/horn.py index 987ba472b..4a7376cd0 100644 --- a/infinigen/assets/surfaces/horn.py +++ b/infinigen/assets/materials/horn.py @@ -7,10 +7,10 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface def shader_horn(nw: NodeWrangler): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/surfaces/ice.py b/infinigen/assets/materials/ice.py similarity index 91% rename from infinigen/assets/surfaces/ice.py rename to infinigen/assets/materials/ice.py index 648838c12..40c858bb0 100644 --- a/infinigen/assets/surfaces/ice.py +++ b/infinigen/assets/materials/ice.py @@ -6,11 +6,11 @@ import gin from numpy.random import uniform -from nodes.node_wrangler import Nodes -from surfaces import surface -from util.organization import SurfaceTypes -from util.math import FixedSeed -from util.random import random_color_neighbour +from infinigen.core.nodes.node_wrangler import Nodes +from infinigen.core import surface +from infinigen.core.util.organization import SurfaceTypes +from infinigen.core.util.math import FixedSeed +from infinigen.core.util.random import random_color_neighbour type = SurfaceTypes.SDFPerturb mod_name = "geo_ice" @@ -19,10 +19,10 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface def shader_ice(nw: NodeWrangler): geometry = nw.new_node(Nodes.NewGeometry) diff --git a/infinigen/assets/surfaces/lava.py b/infinigen/assets/materials/lava.py similarity index 97% rename from infinigen/assets/surfaces/lava.py rename to infinigen/assets/materials/lava.py index 9f2c2b811..7fa252cd3 100644 --- a/infinigen/assets/surfaces/lava.py +++ b/infinigen/assets/materials/lava.py @@ -9,14 +9,14 @@ import gin from mathutils import Vector -from nodes import node_utils -from nodes.node_wrangler import Nodes +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.node_wrangler import Nodes from numpy.random import uniform -from surfaces import surface -from util.organization import SurfaceTypes -from terrain.utils import drive_param -from util.math import FixedSeed -from util.random import random_color_neighbour +from infinigen.core import surface +from infinigen.core.util.organization import SurfaceTypes +from infinigen.terrain.utils import drive_param +from infinigen.core.util.math import FixedSeed +from infinigen.core.util.random import random_color_neighbour type = SurfaceTypes.BlenderDisplacement mod_name = "lava_geo" diff --git a/infinigen/assets/surfaces/mountain.py b/infinigen/assets/materials/mountain.py similarity index 96% rename from infinigen/assets/surfaces/mountain.py rename to infinigen/assets/materials/mountain.py index 0b53f71f6..c7ad82cf0 100644 --- a/infinigen/assets/surfaces/mountain.py +++ b/infinigen/assets/materials/mountain.py @@ -7,14 +7,14 @@ import gin import numpy as np -from nodes.node_wrangler import Nodes, NodeWrangler -from surfaces import surface -from util.organization import SurfaceTypes -from util.math import FixedSeed -from util.random import clip_hsv, random_color, random_color_neighbour -from util.random import random_general as rg - -from terrain.land_process.snowfall import snowfall_params +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core import surface +from infinigen.core.util.organization import SurfaceTypes +from infinigen.core.util.math import FixedSeed +from infinigen.core.util.random import clip_hsv, random_color, random_color_neighbour +from infinigen.core.util.random import random_general as rg + +from infinigen.terrain.land_process.snowfall import snowfall_params type = SurfaceTypes.SDFPerturb mod_name = "geo_MOUNTAIN" diff --git a/infinigen/assets/surfaces/mud.py b/infinigen/assets/materials/mud.py similarity index 95% rename from infinigen/assets/surfaces/mud.py rename to infinigen/assets/materials/mud.py index 99929ff57..231e94bd5 100644 --- a/infinigen/assets/surfaces/mud.py +++ b/infinigen/assets/materials/mud.py @@ -6,12 +6,12 @@ import bpy import mathutils from numpy.random import uniform as U, normal as N, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface -from util.organization import SurfaceTypes -from util.math import FixedSeed +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface +from infinigen.core.util.organization import SurfaceTypes +from infinigen.core.util.math import FixedSeed import gin type = SurfaceTypes.SDFPerturb diff --git a/infinigen/assets/surfaces/new_whitewater.py b/infinigen/assets/materials/new_whitewater.py similarity index 84% rename from infinigen/assets/surfaces/new_whitewater.py rename to infinigen/assets/materials/new_whitewater.py index 67766c0f7..091a4c6ee 100644 --- a/infinigen/assets/surfaces/new_whitewater.py +++ b/infinigen/assets/materials/new_whitewater.py @@ -6,11 +6,11 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface -from util.random import random_color_neighbour +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface +from infinigen.core.util.random import random_color_neighbour def new_whitewater(nw: NodeWrangler): # Code generated using version 2.6.3 of the node_transpiler diff --git a/infinigen/assets/surfaces/nose.py b/infinigen/assets/materials/nose.py similarity index 88% rename from infinigen/assets/surfaces/nose.py rename to infinigen/assets/materials/nose.py index 75a6c9b4e..533562cc0 100644 --- a/infinigen/assets/surfaces/nose.py +++ b/infinigen/assets/materials/nose.py @@ -7,10 +7,10 @@ import bpy import mathutils from numpy.random import uniform as U, normal as N, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface def shader_nose(nw: NodeWrangler): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/surfaces/reptile_brown_circle_attr.py b/infinigen/assets/materials/reptile_brown_circle_attr.py similarity index 97% rename from infinigen/assets/surfaces/reptile_brown_circle_attr.py rename to infinigen/assets/materials/reptile_brown_circle_attr.py index 4cdd1adf1..7aac64631 100644 --- a/infinigen/assets/surfaces/reptile_brown_circle_attr.py +++ b/infinigen/assets/materials/reptile_brown_circle_attr.py @@ -7,16 +7,16 @@ import os, sys import numpy as np import math as ma -from surfaces.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise +from infinigen.assets.materials.utils.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.creatures.nodegroups.shader import nodegroup_color_mask +from infinigen.assets.creatures.util.nodegroups.shader import nodegroup_color_mask def shader_brown_circle(nw: NodeWrangler, rand=True, **input_kwargs): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/surfaces/reptile_gray_attr.py b/infinigen/assets/materials/reptile_gray_attr.py similarity index 94% rename from infinigen/assets/surfaces/reptile_gray_attr.py rename to infinigen/assets/materials/reptile_gray_attr.py index c98b0975c..6d4bcb4dd 100644 --- a/infinigen/assets/surfaces/reptile_gray_attr.py +++ b/infinigen/assets/materials/reptile_gray_attr.py @@ -7,16 +7,16 @@ import os, sys import numpy as np import math as ma -from surfaces.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise +from infinigen.assets.materials.utils.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.creatures.nodegroups.shader import nodegroup_color_mask +from infinigen.assets.creatures.util.nodegroups.shader import nodegroup_color_mask def shader_gray(nw: NodeWrangler, rand=True, **input_kwargs): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/surfaces/reptile_two_color_attr.py b/infinigen/assets/materials/reptile_two_color_attr.py similarity index 96% rename from infinigen/assets/surfaces/reptile_two_color_attr.py rename to infinigen/assets/materials/reptile_two_color_attr.py index cbfebe3c8..6c52d29d7 100644 --- a/infinigen/assets/surfaces/reptile_two_color_attr.py +++ b/infinigen/assets/materials/reptile_two_color_attr.py @@ -7,16 +7,16 @@ import os, sys import numpy as np import math as ma -from surfaces.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise +from infinigen.assets.materials.utils.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.creatures.nodegroups.shader import nodegroup_color_mask +from infinigen.assets.creatures.util.nodegroups.shader import nodegroup_color_mask def shader_two_color(nw: NodeWrangler, rand=True, **input_kwargs): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/surfaces/river_water.py b/infinigen/assets/materials/river_water.py similarity index 97% rename from infinigen/assets/surfaces/river_water.py rename to infinigen/assets/materials/river_water.py index 388125c03..b565d1dd0 100644 --- a/infinigen/assets/surfaces/river_water.py +++ b/infinigen/assets/materials/river_water.py @@ -6,12 +6,12 @@ import bpy import mathutils from numpy.random import normal as N -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from util.random import random_color_neighbour +from infinigen.core.util.random import random_color_neighbour def shader_river_water(nw: NodeWrangler): # Code generated using version 2.6.3 of the node_transpiler diff --git a/infinigen/assets/surfaces/sand.py b/infinigen/assets/materials/sand.py similarity index 95% rename from infinigen/assets/surfaces/sand.py rename to infinigen/assets/materials/sand.py index a77f97230..6fa798412 100644 --- a/infinigen/assets/surfaces/sand.py +++ b/infinigen/assets/materials/sand.py @@ -8,11 +8,11 @@ import gin from mathutils import Vector -from nodes.node_wrangler import Nodes -from surfaces import surface -from util.organization import SurfaceTypes -from util.math import FixedSeed -from util.random import random_general as rg +from infinigen.core.nodes.node_wrangler import Nodes +from infinigen.core import surface +from infinigen.core.util.organization import SurfaceTypes +from infinigen.core.util.math import FixedSeed +from infinigen.core.util.random import random_general as rg type = SurfaceTypes.SDFPerturb mod_name = "geo_SAND" diff --git a/infinigen/assets/surfaces/sandstone.py b/infinigen/assets/materials/sandstone.py similarity index 98% rename from infinigen/assets/surfaces/sandstone.py rename to infinigen/assets/materials/sandstone.py index af2a4a898..448d7afa6 100644 --- a/infinigen/assets/surfaces/sandstone.py +++ b/infinigen/assets/materials/sandstone.py @@ -7,13 +7,13 @@ # Code generated using version v2.0.0 of the node_transpiler import gin -from nodes import node_utils -from nodes.node_wrangler import Nodes +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.node_wrangler import Nodes from numpy.random import uniform -from surfaces import surface -from util.organization import SurfaceTypes -from util.random import random_color_neighbour -from util.random import random_general as rg +from infinigen.core import surface +from infinigen.core.util.organization import SurfaceTypes +from infinigen.core.util.random import random_color_neighbour +from infinigen.core.util.random import random_general as rg from .mountain import geo_MOUNTAIN_general from mathutils import Vector diff --git a/infinigen/assets/surfaces/scale.py b/infinigen/assets/materials/scale.py similarity index 98% rename from infinigen/assets/surfaces/scale.py rename to infinigen/assets/materials/scale.py index 32be71e7f..fb8dfeb17 100644 --- a/infinigen/assets/surfaces/scale.py +++ b/infinigen/assets/materials/scale.py @@ -8,13 +8,13 @@ import os, sys import numpy as np import math as ma -from surfaces.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise +from infinigen.assets.materials.utils.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise import bpy import mathutils from numpy.random import normal as normal_func -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core import surface import random def shader_scale(nw, rand=True, **input_kwargs): diff --git a/infinigen/assets/surfaces/simple_brownish.py b/infinigen/assets/materials/simple_brownish.py similarity index 86% rename from infinigen/assets/surfaces/simple_brownish.py rename to infinigen/assets/materials/simple_brownish.py index 319e04729..b8e4a508c 100644 --- a/infinigen/assets/surfaces/simple_brownish.py +++ b/infinigen/assets/materials/simple_brownish.py @@ -5,10 +5,10 @@ from numpy.random import uniform as U, normal as N, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface def shader_simple_brown(nw: NodeWrangler): diff --git a/infinigen/assets/surfaces/simple_greenery.py b/infinigen/assets/materials/simple_greenery.py similarity index 90% rename from infinigen/assets/surfaces/simple_greenery.py rename to infinigen/assets/materials/simple_greenery.py index 60f16e049..596eeaa55 100644 --- a/infinigen/assets/surfaces/simple_greenery.py +++ b/infinigen/assets/materials/simple_greenery.py @@ -7,10 +7,10 @@ import bpy import mathutils from numpy.random import uniform as U, normal as N, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface def shader_simple_greenery(nw: NodeWrangler): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/surfaces/simple_whitish.py b/infinigen/assets/materials/simple_whitish.py similarity index 87% rename from infinigen/assets/surfaces/simple_whitish.py rename to infinigen/assets/materials/simple_whitish.py index 87f852075..deff92475 100644 --- a/infinigen/assets/surfaces/simple_whitish.py +++ b/infinigen/assets/materials/simple_whitish.py @@ -5,10 +5,10 @@ from numpy.random import uniform as U, normal as N, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface def shader_simple_white(nw: NodeWrangler): diff --git a/infinigen/assets/surfaces/slimy.py b/infinigen/assets/materials/slimy.py similarity index 95% rename from infinigen/assets/surfaces/slimy.py rename to infinigen/assets/materials/slimy.py index 35a4e2a5b..a5c8926e5 100644 --- a/infinigen/assets/surfaces/slimy.py +++ b/infinigen/assets/materials/slimy.py @@ -7,12 +7,12 @@ import os, sys import numpy as np import math as ma -from surfaces.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise +from infinigen.assets.materials.utils.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise import bpy import mathutils from numpy.random import uniform, normal -from nodes.node_wrangler import Nodes, NodeWrangler -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core import surface import random def shader_slimy(nw, rand=False, **input_kwargs): diff --git a/infinigen/assets/surfaces/smoke_material.py b/infinigen/assets/materials/smoke_material.py similarity index 74% rename from infinigen/assets/surfaces/smoke_material.py rename to infinigen/assets/materials/smoke_material.py index d596dd9c0..6ad50cc0d 100644 --- a/infinigen/assets/surfaces/smoke_material.py +++ b/infinigen/assets/materials/smoke_material.py @@ -7,12 +7,12 @@ import bpy import mathutils from numpy.random import uniform, normal -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface import numpy as np -from util.random import random_color_neighbour +from infinigen.core.util.random import random_color_neighbour def smoke_material(nw): # Code generated using version 2.3.2 of the node_transpiler diff --git a/infinigen/assets/surfaces/snake_plant.py b/infinigen/assets/materials/snake_plant.py similarity index 96% rename from infinigen/assets/surfaces/snake_plant.py rename to infinigen/assets/materials/snake_plant.py index 8dda84f2d..2ba988b7c 100644 --- a/infinigen/assets/surfaces/snake_plant.py +++ b/infinigen/assets/materials/snake_plant.py @@ -8,10 +8,10 @@ import bpy import mathutils from numpy.random import uniform as U, normal as N, randint, choice -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import hsv2rgba -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import hsv2rgba +from infinigen.core import surface import numpy as np import colorsys diff --git a/infinigen/assets/surfaces/snake_scale.py b/infinigen/assets/materials/snake_scale.py similarity index 98% rename from infinigen/assets/surfaces/snake_scale.py rename to infinigen/assets/materials/snake_scale.py index 0b6cb7053..576fb3a55 100644 --- a/infinigen/assets/surfaces/snake_scale.py +++ b/infinigen/assets/materials/snake_scale.py @@ -8,11 +8,11 @@ import mathutils import random from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface -from surfaces.templates import snake_shaders +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface +from infinigen.assets.materials import snake_shaders @node_utils.to_nodegroup('nodegroup_scale_shape', singleton=False, type='GeometryNodeTree') def nodegroup_scale_shape(nw: NodeWrangler): diff --git a/infinigen/assets/surfaces/snake_shaders.py b/infinigen/assets/materials/snake_shaders.py similarity index 97% rename from infinigen/assets/surfaces/snake_shaders.py rename to infinigen/assets/materials/snake_shaders.py index f8f2d29f4..0550fd13d 100644 --- a/infinigen/assets/surfaces/snake_shaders.py +++ b/infinigen/assets/materials/snake_shaders.py @@ -8,11 +8,11 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from surfaces.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.assets.materials.utils.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface import random def shader_black_white_snake(nw: NodeWrangler, rand=True): diff --git a/infinigen/assets/surfaces/snow.py b/infinigen/assets/materials/snow.py similarity index 96% rename from infinigen/assets/surfaces/snow.py rename to infinigen/assets/materials/snow.py index b7f74daaa..2baf3160f 100644 --- a/infinigen/assets/surfaces/snow.py +++ b/infinigen/assets/materials/snow.py @@ -2,9 +2,9 @@ # adapted from Blender Real Snow add-on https://docs.blender.org/manual/en/latest/addons/object/real_snow.html # License: GPL -from nodes.node_wrangler import Nodes -from surfaces import surface -from util.organization import SurfaceTypes +from infinigen.core.nodes.node_wrangler import Nodes +from infinigen.core import surface +from infinigen.core.util.organization import SurfaceTypes type = SurfaceTypes.SDFPerturb mod_name = "geo_snowtexture" diff --git a/infinigen/assets/surfaces/soil.py b/infinigen/assets/materials/soil.py similarity index 97% rename from infinigen/assets/surfaces/soil.py rename to infinigen/assets/materials/soil.py index d02e537ea..48c7e7077 100644 --- a/infinigen/assets/surfaces/soil.py +++ b/infinigen/assets/materials/soil.py @@ -5,13 +5,13 @@ import gin -from nodes import node_utils -from nodes.node_wrangler import Nodes +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.node_wrangler import Nodes from numpy.random import uniform -from surfaces import surface -from util.organization import SurfaceTypes -from util.math import FixedSeed -from util.random import random_color_neighbour +from infinigen.core import surface +from infinigen.core.util.organization import SurfaceTypes +from infinigen.core.util.math import FixedSeed +from infinigen.core.util.random import random_color_neighbour type = SurfaceTypes.SDFPerturb mod_name = "geometry_soil" diff --git a/infinigen/assets/surfaces/spider_plant.py b/infinigen/assets/materials/spider_plant.py similarity index 85% rename from infinigen/assets/surfaces/spider_plant.py rename to infinigen/assets/materials/spider_plant.py index 10553b740..9d94a3dc6 100644 --- a/infinigen/assets/surfaces/spider_plant.py +++ b/infinigen/assets/materials/spider_plant.py @@ -4,10 +4,10 @@ # Authors: Beining Han from numpy.random import uniform, normal , randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category, hsv2rgba -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category, hsv2rgba +from infinigen.core import surface def shader_spider_plant(nw: NodeWrangler): diff --git a/infinigen/assets/surfaces/spot_sparse_attr.py b/infinigen/assets/materials/spot_sparse_attr.py similarity index 93% rename from infinigen/assets/surfaces/spot_sparse_attr.py rename to infinigen/assets/materials/spot_sparse_attr.py index 5f981bce6..1c455e1cf 100644 --- a/infinigen/assets/surfaces/spot_sparse_attr.py +++ b/infinigen/assets/materials/spot_sparse_attr.py @@ -7,16 +7,16 @@ import os, sys import numpy as np import math as ma -from surfaces.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise +from infinigen.assets.materials.utils.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise import bpy import mathutils from numpy.random import uniform as U, normal as N, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category, hsv2rgba -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category, hsv2rgba +from infinigen.core import surface -from assets.creatures.nodegroups.shader import nodegroup_color_mask +from infinigen.assets.creatures.util.nodegroups.shader import nodegroup_color_mask def shader_spots_sparse_attr(nw: NodeWrangler, rand=True, **input_kwargs): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/surfaces/stone.py b/infinigen/assets/materials/stone.py similarity index 97% rename from infinigen/assets/surfaces/stone.py rename to infinigen/assets/materials/stone.py index 141749460..f05b5a392 100644 --- a/infinigen/assets/surfaces/stone.py +++ b/infinigen/assets/materials/stone.py @@ -9,12 +9,12 @@ import bpy import gin -from nodes.node_wrangler import Nodes +from infinigen.core.nodes.node_wrangler import Nodes from numpy.random import uniform, normal as N -from surfaces import surface -from surfaces.surface_utils import sample_color, sample_ratio -from util.organization import SurfaceTypes -from util.math import FixedSeed +from infinigen.core import surface +from infinigen.assets.materials.utils.surface_utils import sample_color, sample_ratio +from infinigen.core.util.organization import SurfaceTypes +from infinigen.core.util.math import FixedSeed from .mountain import geo_MOUNTAIN_general diff --git a/infinigen/assets/surfaces/succulent.py b/infinigen/assets/materials/succulent.py similarity index 98% rename from infinigen/assets/surfaces/succulent.py rename to infinigen/assets/materials/succulent.py index 1de1e9c58..cec5adbe2 100644 --- a/infinigen/assets/surfaces/succulent.py +++ b/infinigen/assets/materials/succulent.py @@ -5,11 +5,11 @@ # Acknowledgements: This file draws inspiration from https://blenderartists.org/t/extrude-face-along-curve-with-geometry-nodes/1432653/3 from numpy.random import uniform, normal , randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface -from nodes.color import hsv2rgba +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface +from infinigen.core.nodes.color import hsv2rgba diff --git a/infinigen/assets/surfaces/three_color_spots.py b/infinigen/assets/materials/three_color_spots.py similarity index 97% rename from infinigen/assets/surfaces/three_color_spots.py rename to infinigen/assets/materials/three_color_spots.py index c1037d376..93ef81ad7 100644 --- a/infinigen/assets/surfaces/three_color_spots.py +++ b/infinigen/assets/materials/three_color_spots.py @@ -7,12 +7,12 @@ import os, sys import numpy as np import math as ma -from surfaces.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise +from infinigen.assets.materials.utils.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise import bpy import mathutils from numpy.random import uniform, normal -from nodes.node_wrangler import Nodes, NodeWrangler -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core import surface def shader_spot(nw, rand=True, **input_kwargs): diff --git a/infinigen/assets/surfaces/tiger_attr.py b/infinigen/assets/materials/tiger_attr.py similarity index 90% rename from infinigen/assets/surfaces/tiger_attr.py rename to infinigen/assets/materials/tiger_attr.py index 466369a10..85dc444c8 100644 --- a/infinigen/assets/surfaces/tiger_attr.py +++ b/infinigen/assets/materials/tiger_attr.py @@ -8,25 +8,25 @@ import os, sys import numpy as np import math as ma -from surfaces.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise +from infinigen.assets.materials.utils.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise import bpy import mathutils from numpy.random import uniform as U, normal as N, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category, hsv2rgba -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category, hsv2rgba +from infinigen.core import surface -from assets.creatures.nodegroups.shader import nodegroup_color_mask +from infinigen.assets.creatures.util.nodegroups.shader import nodegroup_color_mask import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from assets.creatures.nodegroups.shader import nodegroup_color_mask +from infinigen.assets.creatures.util.nodegroups.shader import nodegroup_color_mask @node_utils.to_nodegroup('nodegroup_tiger_fac', singleton=False, type='ShaderNodeTree') def nodegroup_tiger_fac(nw: NodeWrangler): diff --git a/infinigen/assets/surfaces/tongue.py b/infinigen/assets/materials/tongue.py similarity index 86% rename from infinigen/assets/surfaces/tongue.py rename to infinigen/assets/materials/tongue.py index 895dc8896..d3e5fe489 100644 --- a/infinigen/assets/surfaces/tongue.py +++ b/infinigen/assets/materials/tongue.py @@ -7,10 +7,10 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface def shader_tongue(nw: NodeWrangler): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/surfaces/two_color_spots.py b/infinigen/assets/materials/two_color_spots.py similarity index 95% rename from infinigen/assets/surfaces/two_color_spots.py rename to infinigen/assets/materials/two_color_spots.py index b9efa6362..b34560b6d 100644 --- a/infinigen/assets/surfaces/two_color_spots.py +++ b/infinigen/assets/materials/two_color_spots.py @@ -7,12 +7,12 @@ import os, sys import numpy as np import math as ma -from surfaces.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise +from infinigen.assets.materials.utils.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise import bpy import mathutils from numpy.random import uniform, normal -from nodes.node_wrangler import Nodes, NodeWrangler -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core import surface def shader_two_color_spots(nw, rand=True, **input_kwargs): attribute = nw.new_node(Nodes.Attribute, diff --git a/infinigen/assets/surfaces/twocolorz.py b/infinigen/assets/materials/twocolorz.py similarity index 93% rename from infinigen/assets/surfaces/twocolorz.py rename to infinigen/assets/materials/twocolorz.py index de00903ab..6e567e09b 100644 --- a/infinigen/assets/surfaces/twocolorz.py +++ b/infinigen/assets/materials/twocolorz.py @@ -7,12 +7,12 @@ import os, sys import numpy as np import math as ma -from surfaces.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise +from infinigen.assets.materials.utils.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise import bpy import mathutils from numpy.random import uniform, normal -from nodes.node_wrangler import Nodes, NodeWrangler -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core import surface def shader_twocolorz(nw, rand=True, **input_kwargs): diff --git a/infinigen/assets/materials/utils/__init__.py b/infinigen/assets/materials/utils/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/infinigen/core/surfaces/surface_utils.py b/infinigen/assets/materials/utils/surface_utils.py similarity index 97% rename from infinigen/core/surfaces/surface_utils.py rename to infinigen/assets/materials/utils/surface_utils.py index 43b0059b3..ca3d4cecc 100644 --- a/infinigen/core/surfaces/surface_utils.py +++ b/infinigen/assets/materials/utils/surface_utils.py @@ -7,10 +7,10 @@ import random import math -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface @node_utils.to_nodegroup('nodegroup_norm_value', singleton=False, type='GeometryNodeTree') def nodegroup_norm_value(nw: NodeWrangler): diff --git a/infinigen/assets/surfaces/water.py b/infinigen/assets/materials/water.py similarity index 96% rename from infinigen/assets/surfaces/water.py rename to infinigen/assets/materials/water.py index 31eabe665..7d90f3470 100644 --- a/infinigen/assets/surfaces/water.py +++ b/infinigen/assets/materials/water.py @@ -11,15 +11,15 @@ import gin import numpy as np from mathutils import Vector -from nodes.node_wrangler import Nodes +from infinigen.core.nodes.node_wrangler import Nodes from numpy.random import normal, uniform -from surfaces import surface -from terrain.assets.ocean import ocean_asset, spatial_size -from util.organization import SurfaceTypes -from terrain.utils import drive_param -from util.math import FixedSeed -from util.random import random_general as rg -from util.organization import Attributes +from infinigen.core import surface +from infinigen.terrain.assets.ocean import ocean_asset, spatial_size +from infinigen.core.util.organization import SurfaceTypes +from infinigen.terrain.utils import drive_param +from infinigen.core.util.math import FixedSeed +from infinigen.core.util.random import random_general as rg +from infinigen.core.util.organization import Attributes type = SurfaceTypes.BlenderDisplacement mod_name = "geo_water" diff --git a/infinigen/assets/surfaces/waterfall_material.py b/infinigen/assets/materials/waterfall_material.py similarity index 94% rename from infinigen/assets/surfaces/waterfall_material.py rename to infinigen/assets/materials/waterfall_material.py index 0a0f3c67f..1d15bb92a 100644 --- a/infinigen/assets/surfaces/waterfall_material.py +++ b/infinigen/assets/materials/waterfall_material.py @@ -6,10 +6,10 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface def waterfall_shader(nw: NodeWrangler): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/surfaces/wood.py b/infinigen/assets/materials/wood.py similarity index 92% rename from infinigen/assets/surfaces/wood.py rename to infinigen/assets/materials/wood.py index 3a826cca3..b378f8534 100644 --- a/infinigen/assets/surfaces/wood.py +++ b/infinigen/assets/materials/wood.py @@ -7,14 +7,14 @@ import os, sys import numpy as np import math as ma -from surfaces.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise +from infinigen.assets.materials.utils.surface_utils import clip, sample_range, sample_ratio, sample_color, geo_voronoi_noise import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface def shader_wood(nw: NodeWrangler, rand=False, **input_kwargs): # Code generated using version 2.4.3 of the node_transpiler diff --git a/infinigen/assets/underwater/mollusk/__init__.py b/infinigen/assets/mollusk/__init__.py similarity index 100% rename from infinigen/assets/underwater/mollusk/__init__.py rename to infinigen/assets/mollusk/__init__.py diff --git a/infinigen/assets/underwater/mollusk/base.py b/infinigen/assets/mollusk/base.py similarity index 90% rename from infinigen/assets/underwater/mollusk/base.py rename to infinigen/assets/mollusk/base.py index 76adbae36..d3528b188 100644 --- a/infinigen/assets/underwater/mollusk/base.py +++ b/infinigen/assets/mollusk/base.py @@ -6,7 +6,7 @@ import bpy -from placement.factory import AssetFactory +from infinigen.core.placement.factory import AssetFactory class BaseMolluskFactory(AssetFactory): diff --git a/infinigen/assets/underwater/mollusk/generate.py b/infinigen/assets/mollusk/generate.py similarity index 93% rename from infinigen/assets/underwater/mollusk/generate.py rename to infinigen/assets/mollusk/generate.py index ddbcc4245..dd914b8cc 100644 --- a/infinigen/assets/underwater/mollusk/generate.py +++ b/infinigen/assets/mollusk/generate.py @@ -10,17 +10,17 @@ import numpy as np from numpy.random import uniform -import util.blender as butil +import infinigen.core.util.blender as butil from .base import BaseMolluskFactory from .shell import ShellBaseFactory, ScallopBaseFactory, ClamBaseFactory, MusselBaseFactory from .snail import SnailBaseFactory, ConchBaseFactory, AugerBaseFactory, VoluteBaseFactory, NautilusBaseFactory -from assets.utils.misc import build_color_ramp, log_uniform +from infinigen.assets.utils.misc import build_color_ramp, log_uniform from ..utils.decorate import assign_material, subsurface2face_size -from nodes.node_wrangler import NodeWrangler, Nodes -from surfaces import surface -from placement.factory import AssetFactory -from util.math import FixedSeed -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.nodes.node_wrangler import NodeWrangler, Nodes +from infinigen.core import surface +from infinigen.core.placement.factory import AssetFactory +from infinigen.core.util.math import FixedSeed +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class MolluskFactory(AssetFactory): def __init__(self, factory_seed, coarse=False, factory_method=None): diff --git a/infinigen/assets/underwater/mollusk/shell.py b/infinigen/assets/mollusk/shell.py similarity index 88% rename from infinigen/assets/underwater/mollusk/shell.py rename to infinigen/assets/mollusk/shell.py index 6f36bbdf0..443332e8e 100644 --- a/infinigen/assets/underwater/mollusk/shell.py +++ b/infinigen/assets/mollusk/shell.py @@ -8,18 +8,18 @@ import numpy as np from numpy.random import normal, uniform -import util.blender as butil -from assets.creatures.animation.driver_repeated import repeated_driver -from assets.mollusk.base import BaseMolluskFactory -from assets.utils.object import mesh2obj, data2mesh, new_circle -from assets.utils.draw import shape_by_angles -from assets.utils.misc import log_uniform -from assets.utils.decorate import displace_vertices, join_objects -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from surfaces import surface -from util.math import FixedSeed -from assets.utils.tag import tag_object, tag_nodegroup +import infinigen.core.util.blender as butil +from infinigen.assets.creatures.util.animation.driver_repeated import repeated_driver +from infinigen.assets.mollusk.base import BaseMolluskFactory +from infinigen.assets.utils.object import mesh2obj, data2mesh, new_circle +from infinigen.assets.utils.draw import shape_by_angles +from infinigen.assets.utils.misc import log_uniform +from infinigen.assets.utils.decorate import displace_vertices, join_objects +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core import surface +from infinigen.core.util.math import FixedSeed +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class ShellBaseFactory(BaseMolluskFactory): diff --git a/infinigen/assets/underwater/mollusk/snail.py b/infinigen/assets/mollusk/snail.py similarity index 93% rename from infinigen/assets/underwater/mollusk/snail.py rename to infinigen/assets/mollusk/snail.py index 8c05f530e..870c3724b 100644 --- a/infinigen/assets/underwater/mollusk/snail.py +++ b/infinigen/assets/mollusk/snail.py @@ -8,15 +8,15 @@ import numpy as np from numpy.random import uniform -import util.blender as butil -from assets.mollusk.base import BaseMolluskFactory -from assets.utils.object import center, mesh2obj, data2mesh, new_empty -from assets.utils.misc import log_uniform -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from surfaces import surface -from util.math import FixedSeed -from assets.utils.tag import tag_object, tag_nodegroup +import infinigen.core.util.blender as butil +from infinigen.assets.mollusk.base import BaseMolluskFactory +from infinigen.assets.utils.object import center, mesh2obj, data2mesh, new_empty +from infinigen.assets.utils.misc import log_uniform +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core import surface +from infinigen.core.util.math import FixedSeed +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class SnailBaseFactory(BaseMolluskFactory): freq = 256 diff --git a/infinigen/assets/monocot/agave.py b/infinigen/assets/monocot/agave.py index 9bb90ed13..5b8abbd54 100644 --- a/infinigen/assets/monocot/agave.py +++ b/infinigen/assets/monocot/agave.py @@ -10,15 +10,15 @@ import numpy as np from numpy.random import uniform -import util.blender as butil -from assets.monocot.growth import MonocotGrowthFactory -from assets.utils.decorate import add_distance_to_boundary, join_objects, displace_vertices -from assets.utils.draw import cut_plane, leaf -from assets.utils.misc import log_uniform -from surfaces.surface import shaderfunc_to_material -from util.blender import deep_clone_obj -from util.math import FixedSeed -from assets.utils.tag import tag_object, tag_nodegroup +import infinigen.core.util.blender as butil +from infinigen.assets.monocot.growth import MonocotGrowthFactory +from infinigen.assets.utils.decorate import add_distance_to_boundary, join_objects, displace_vertices +from infinigen.assets.utils.draw import cut_plane, leaf +from infinigen.assets.utils.misc import log_uniform +from infinigen.core.surface import shaderfunc_to_material +from infinigen.core.util.blender import deep_clone_obj +from infinigen.core.util.math import FixedSeed +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class AgaveMonocotFactory(MonocotGrowthFactory): use_distance = True diff --git a/infinigen/assets/monocot/banana.py b/infinigen/assets/monocot/banana.py index 8f01ccb5a..356ed705b 100644 --- a/infinigen/assets/monocot/banana.py +++ b/infinigen/assets/monocot/banana.py @@ -8,16 +8,16 @@ import numpy as np from numpy.random import uniform -from assets.utils.decorate import displace_vertices, join_objects, read_co -from assets.utils.draw import bezier_curve, leaf -from assets.utils.nodegroup import geo_radius -from assets.utils.object import origin2lowest -from surfaces import surface -from assets.monocot.growth import MonocotGrowthFactory -from assets.utils.misc import log_uniform -from util import blender as butil -from util.math import FixedSeed -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.utils.decorate import displace_vertices, join_objects, read_co +from infinigen.assets.utils.draw import bezier_curve, leaf +from infinigen.assets.utils.nodegroup import geo_radius +from infinigen.assets.utils.object import origin2lowest +from infinigen.core import surface +from infinigen.assets.monocot.growth import MonocotGrowthFactory +from infinigen.assets.utils.misc import log_uniform +from infinigen.core.util import blender as butil +from infinigen.core.util.math import FixedSeed +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class BananaMonocotFactory(MonocotGrowthFactory): diff --git a/infinigen/assets/monocot/generate.py b/infinigen/assets/monocot/generate.py index 5e0405482..4ce3b293d 100644 --- a/infinigen/assets/monocot/generate.py +++ b/infinigen/assets/monocot/generate.py @@ -14,11 +14,11 @@ from .grasses import GrassesMonocotFactory, MaizeMonocotFactory, WheatMonocotFactory from .growth import MonocotGrowthFactory from .tussock import TussockMonocotFactory -from placement.factory import AssetFactory -from util.math import FixedSeed +from infinigen.core.placement.factory import AssetFactory +from infinigen.core.util.math import FixedSeed from ..utils.decorate import join_objects from ..utils.mesh import polygon_angles -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class MonocotFactory(AssetFactory): max_cluster = 10 diff --git a/infinigen/assets/monocot/grasses.py b/infinigen/assets/monocot/grasses.py index 79e41babb..f2e4e0da0 100644 --- a/infinigen/assets/monocot/grasses.py +++ b/infinigen/assets/monocot/grasses.py @@ -10,23 +10,23 @@ import numpy as np from numpy.random import uniform -from assets.monocot.growth import MonocotGrowthFactory -from assets.utils.decorate import assign_material, join_objects, remove_vertices, write_attribute, \ +from infinigen.assets.monocot.growth import MonocotGrowthFactory +from infinigen.assets.utils.decorate import assign_material, join_objects, remove_vertices, write_attribute, \ write_material_index -from assets.utils.draw import bezier_curve, leaf, spin -from assets.utils.mesh import polygon_angles -from assets.utils.misc import log_uniform - -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler - -from placement.factory import AssetFactory, make_asset_collection -from placement.detail import remesh_with_attrs -from surfaces import surface -from surfaces.surface import read_attr_data, shaderfunc_to_material -from util import blender as butil -from util.math import FixedSeed -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.utils.draw import bezier_curve, leaf, spin +from infinigen.assets.utils.mesh import polygon_angles +from infinigen.assets.utils.misc import log_uniform + +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler + +from infinigen.core.placement.factory import AssetFactory, make_asset_collection +from infinigen.core.placement.detail import remesh_with_attrs +from infinigen.core import surface +from infinigen.core.surface import read_attr_data, shaderfunc_to_material +from infinigen.core.util import blender as butil +from infinigen.core.util.math import FixedSeed +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class GrassesMonocotFactory(MonocotGrowthFactory): diff --git a/infinigen/assets/monocot/growth.py b/infinigen/assets/monocot/growth.py index 40a027050..bc843034b 100644 --- a/infinigen/assets/monocot/growth.py +++ b/infinigen/assets/monocot/growth.py @@ -12,21 +12,21 @@ import numpy as np from numpy.random import uniform -from assets.utils.decorate import assign_material, displace_vertices, geo_extension, join_objects -from assets.utils.misc import build_color_ramp, log_uniform -from assets.utils.nodegroup import geo_radius -from placement.detail import adapt_mesh_resolution -from surfaces.surface import shaderfunc_to_material -from util import blender as butil -from assets.utils.object import data2mesh, mesh2obj, new_cube, origin2leftmost -from nodes.node_info import Nodes -from placement.factory import AssetFactory, make_asset_collection -from nodes.node_wrangler import NodeWrangler -from placement.factory import AssetFactory -from surfaces import surface -from util.blender import deep_clone_obj -from util.math import FixedSeed -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.utils.decorate import assign_material, displace_vertices, geo_extension, join_objects +from infinigen.assets.utils.misc import build_color_ramp, log_uniform +from infinigen.assets.utils.nodegroup import geo_radius +from infinigen.core.placement.detail import adapt_mesh_resolution +from infinigen.core.surface import shaderfunc_to_material +from infinigen.core.util import blender as butil +from infinigen.assets.utils.object import data2mesh, mesh2obj, new_cube, origin2leftmost +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.placement.factory import AssetFactory, make_asset_collection +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core.placement.factory import AssetFactory +from infinigen.core import surface +from infinigen.core.util.blender import deep_clone_obj +from infinigen.core.util.math import FixedSeed +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class MonocotGrowthFactory(AssetFactory): use_distance = False diff --git a/infinigen/assets/monocot/kelp.py b/infinigen/assets/monocot/kelp.py index 9168b4a03..bb966e202 100644 --- a/infinigen/assets/monocot/kelp.py +++ b/infinigen/assets/monocot/kelp.py @@ -8,16 +8,16 @@ import numpy as np from numpy.random import uniform -import util.blender as butil -from assets.creatures.animation.driver_repeated import repeated_driver -from assets.monocot.growth import MonocotGrowthFactory -from assets.utils.draw import bezier_curve, leaf -from assets.utils.decorate import assign_material, join_objects -from assets.utils.misc import log_uniform -from assets.utils.object import origin2leftmost -from nodes.node_wrangler import NodeWrangler -from placement.detail import remesh_with_attrs -from util.math import FixedSeed +import infinigen.core.util.blender as butil +from infinigen.assets.creatures.util.animation.driver_repeated import repeated_driver +from infinigen.assets.monocot.growth import MonocotGrowthFactory +from infinigen.assets.utils.draw import bezier_curve, leaf +from infinigen.assets.utils.decorate import assign_material, join_objects +from infinigen.assets.utils.misc import log_uniform +from infinigen.assets.utils.object import origin2leftmost +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core.placement.detail import remesh_with_attrs +from infinigen.core.util.math import FixedSeed class KelpMonocotFactory(MonocotGrowthFactory): diff --git a/infinigen/assets/monocot/pinecone.py b/infinigen/assets/monocot/pinecone.py index 868d327ac..bb60c3db4 100644 --- a/infinigen/assets/monocot/pinecone.py +++ b/infinigen/assets/monocot/pinecone.py @@ -10,17 +10,17 @@ import numpy as np from numpy.random import uniform -import util.blender as butil -from assets.monocot.growth import MonocotGrowthFactory -from assets.utils.object import new_circle -from assets.utils.draw import shape_by_angles, shape_by_xs -from assets.utils.misc import build_color_ramp, log_uniform -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from placement.detail import remesh_with_attrs -from surfaces.surface import shaderfunc_to_material -from util.math import FixedSeed -from assets.utils.tag import tag_object, tag_nodegroup +import infinigen.core.util.blender as butil +from infinigen.assets.monocot.growth import MonocotGrowthFactory +from infinigen.assets.utils.object import new_circle +from infinigen.assets.utils.draw import shape_by_angles, shape_by_xs +from infinigen.assets.utils.misc import build_color_ramp, log_uniform +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core.placement.detail import remesh_with_attrs +from infinigen.core.surface import shaderfunc_to_material +from infinigen.core.util.math import FixedSeed +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class PineconeFactory(MonocotGrowthFactory): def __init__(self, factory_seed, coarse=False): diff --git a/infinigen/assets/monocot/tussock.py b/infinigen/assets/monocot/tussock.py index b59d4e3d7..ffc0493de 100644 --- a/infinigen/assets/monocot/tussock.py +++ b/infinigen/assets/monocot/tussock.py @@ -6,11 +6,11 @@ import numpy as np from numpy.random import uniform -from assets.utils.draw import leaf -from assets.monocot.growth import MonocotGrowthFactory -from assets.utils.misc import log_uniform -from util.math import FixedSeed -from assets.utils.tag import tag_object +from infinigen.assets.utils.draw import leaf +from infinigen.assets.monocot.growth import MonocotGrowthFactory +from infinigen.assets.utils.misc import log_uniform +from infinigen.core.util.math import FixedSeed +from infinigen.assets.utils.tag import tag_object class TussockMonocotFactory(MonocotGrowthFactory): diff --git a/infinigen/assets/monocot/veratrum.py b/infinigen/assets/monocot/veratrum.py index c62a5dd64..e22f01a6a 100644 --- a/infinigen/assets/monocot/veratrum.py +++ b/infinigen/assets/monocot/veratrum.py @@ -10,19 +10,19 @@ import numpy as np from numpy.random import uniform -from assets.monocot.growth import MonocotGrowthFactory -from assets.utils.decorate import add_distance_to_boundary, assign_material, join_objects, write_attribute, \ +from infinigen.assets.monocot.growth import MonocotGrowthFactory +from infinigen.assets.utils.decorate import add_distance_to_boundary, assign_material, join_objects, write_attribute, \ write_material_index -from assets.utils.draw import leaf, spin -from assets.utils.misc import log_uniform -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from placement.factory import AssetFactory -from surfaces import surface -from surfaces.surface import shaderfunc_to_material -from util.math import FixedSeed -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.utils.draw import leaf, spin +from infinigen.assets.utils.misc import log_uniform +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core.placement.factory import AssetFactory +from infinigen.core import surface +from infinigen.core.surface import shaderfunc_to_material +from infinigen.core.util.math import FixedSeed +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class VeratrumMonocotFactory(MonocotGrowthFactory): diff --git a/infinigen/assets/mushroom/cap.py b/infinigen/assets/mushroom/cap.py index 94dfc9d39..8a36d7b8c 100644 --- a/infinigen/assets/mushroom/cap.py +++ b/infinigen/assets/mushroom/cap.py @@ -10,20 +10,20 @@ import numpy as np from numpy.random import uniform -from assets.utils.decorate import assign_material, displace_vertices, geo_extension, join_objects, \ +from infinigen.assets.utils.decorate import assign_material, displace_vertices, geo_extension, join_objects, \ subsurface2face_size -from assets.utils.draw import spin -from assets.utils.mesh import polygon_angles -from assets.utils.misc import build_color_ramp, log_uniform -from assets.utils.object import data2mesh, mesh2obj -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from placement.detail import remesh_with_attrs -from placement.factory import AssetFactory -from surfaces import surface -from util import blender as butil -from util.math import FixedSeed -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.utils.draw import spin +from infinigen.assets.utils.mesh import polygon_angles +from infinigen.assets.utils.misc import build_color_ramp, log_uniform +from infinigen.assets.utils.object import data2mesh, mesh2obj +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core.placement.detail import remesh_with_attrs +from infinigen.core.placement.factory import AssetFactory +from infinigen.core import surface +from infinigen.core.util import blender as butil +from infinigen.core.util.math import FixedSeed +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class MushroomCapFactory(AssetFactory): diff --git a/infinigen/assets/mushroom/generate.py b/infinigen/assets/mushroom/generate.py index 36dad72f1..369b39904 100644 --- a/infinigen/assets/mushroom/generate.py +++ b/infinigen/assets/mushroom/generate.py @@ -10,15 +10,15 @@ from mathutils import Euler, kdtree from numpy.random import uniform -from util.blender import deep_clone_obj -from util.math import FixedSeed +from infinigen.core.util.blender import deep_clone_obj +from infinigen.core.util.math import FixedSeed from .growth import MushroomGrowthFactory -from assets.utils.decorate import join_objects -from assets.utils.mesh import polygon_angles -from placement.factory import AssetFactory -from util import blender as butil +from infinigen.assets.utils.decorate import join_objects +from infinigen.assets.utils.mesh import polygon_angles +from infinigen.core.placement.factory import AssetFactory +from infinigen.core.util import blender as butil from ..utils.misc import log_uniform -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class MushroomFactory(AssetFactory): max_cluster = 10 diff --git a/infinigen/assets/mushroom/growth.py b/infinigen/assets/mushroom/growth.py index 1e9ac0de6..ba60c1194 100644 --- a/infinigen/assets/mushroom/growth.py +++ b/infinigen/assets/mushroom/growth.py @@ -7,14 +7,14 @@ import colorsys from numpy.random import uniform -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from surfaces import surface -from util.math import FixedSeed +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core import surface +from infinigen.core.util.math import FixedSeed from .cap import MushroomCapFactory from .stem import MushroomStemFactory -from assets.utils.object import origin2lowest -from placement.factory import AssetFactory +from infinigen.assets.utils.object import origin2lowest +from infinigen.core.placement.factory import AssetFactory from ..utils.decorate import join_objects from ..utils.misc import build_color_ramp, log_uniform diff --git a/infinigen/assets/mushroom/stem.py b/infinigen/assets/mushroom/stem.py index 358697aa0..28846a49a 100644 --- a/infinigen/assets/mushroom/stem.py +++ b/infinigen/assets/mushroom/stem.py @@ -8,18 +8,18 @@ import numpy as np from numpy.random import uniform -from assets.utils.decorate import assign_material, geo_extension, join_objects, subsurface2face_size -from assets.utils.draw import spin - -from assets.utils.misc import log_uniform -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from placement.detail import remesh_with_attrs -from placement.factory import AssetFactory -from surfaces import surface -from util import blender as butil -from util.math import FixedSeed -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.utils.decorate import assign_material, geo_extension, join_objects, subsurface2face_size +from infinigen.assets.utils.draw import spin + +from infinigen.assets.utils.misc import log_uniform +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core.placement.detail import remesh_with_attrs +from infinigen.core.placement.factory import AssetFactory +from infinigen.core import surface +from infinigen.core.util import blender as butil +from infinigen.core.util.math import FixedSeed +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class MushroomStemFactory(AssetFactory): diff --git a/infinigen/assets/rocks/__init__.py b/infinigen/assets/rocks/__init__.py new file mode 100644 index 000000000..b9742821a --- /dev/null +++ b/infinigen/assets/rocks/__init__.py @@ -0,0 +1 @@ +from . import * \ No newline at end of file diff --git a/infinigen/assets/rocks/blender_rock.py b/infinigen/assets/rocks/blender_rock.py index 552b669e4..2477b9710 100644 --- a/infinigen/assets/rocks/blender_rock.py +++ b/infinigen/assets/rocks/blender_rock.py @@ -9,11 +9,11 @@ import numpy as np from numpy.random import uniform as U, normal as N -from util.blender import deep_clone_obj -from util.math import FixedSeed -from util import blender as butil -from placement.factory import AssetFactory -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.util.blender import deep_clone_obj +from infinigen.core.util.math import FixedSeed +from infinigen.core.util import blender as butil +from infinigen.core.placement.factory import AssetFactory +from infinigen.assets.utils.tag import tag_object, tag_nodegroup bpy.ops.preferences.addon_enable(module='add_mesh_extra_objects') diff --git a/infinigen/assets/rocks/pile.py b/infinigen/assets/rocks/pile.py index 4beea1776..796227389 100644 --- a/infinigen/assets/rocks/pile.py +++ b/infinigen/assets/rocks/pile.py @@ -9,15 +9,15 @@ import numpy as np from numpy.random import uniform -from assets.boulder import BoulderFactory -from assets.utils.physics import free_fall -from placement.detail import remesh_with_attrs -from placement.factory import AssetFactory -import util.blender as butil -from assets.utils.decorate import join_objects, multi_res, toggle_hide -from assets.utils.draw import surface_from_func -from util.blender import deep_clone_obj -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.boulder import BoulderFactory +from infinigen.assets.utils.physics import free_fall +from infinigen.core.placement.detail import remesh_with_attrs +from infinigen.core.placement.factory import AssetFactory +import infinigen.core.util.blender as butil +from infinigen.assets.utils.decorate import join_objects, multi_res, toggle_hide +from infinigen.assets.utils.draw import surface_from_func +from infinigen.core.util.blender import deep_clone_obj +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class BoulderPileFactory(AssetFactory): diff --git a/infinigen/assets/scatters/chopped_trees.py b/infinigen/assets/scatters/chopped_trees.py index da28fdf13..2448434a9 100644 --- a/infinigen/assets/scatters/chopped_trees.py +++ b/infinigen/assets/scatters/chopped_trees.py @@ -14,19 +14,19 @@ from numpy.random import uniform, normal from tqdm import tqdm, trange -from util import blender as butil -from util.math import rotate_match_directions, randomspacing -from assets.creatures.geometry.metaballs import plusx_cylinder_unwrap +from infinigen.core.util import blender as butil +from infinigen.core.util.math import rotate_match_directions, randomspacing +from infinigen.assets.creatures.util.geometry.metaballs import plusx_cylinder_unwrap -from nodes import node_utils -from placement.instance_scatter import scatter_instances -from nodes.node_wrangler import Nodes, NodeWrangler -from surfaces import surface -from surfaces.templates import wood +from infinigen.core.nodes import node_utils +from infinigen.core.placement.instance_scatter import scatter_instances +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core import surface +from infinigen.assets.materials import wood -from placement.detail import remesh_with_attrs, target_face_size, scatter_res_distance +from infinigen.core.placement.detail import remesh_with_attrs, target_face_size, scatter_res_distance -from assets.trees.generate import GenericTreeFactory, random_species +from infinigen.assets.trees.generate import GenericTreeFactory, random_species logger = logging.getLogger('chopped_trees') diff --git a/infinigen/assets/scatters/coral_reef.py b/infinigen/assets/scatters/coral_reef.py index b7a1e73a7..6a6f9a47f 100644 --- a/infinigen/assets/scatters/coral_reef.py +++ b/infinigen/assets/scatters/coral_reef.py @@ -7,12 +7,10 @@ import numpy as np from numpy.random import uniform as U -from placement.factory import AssetFactory, make_asset_collection -from assets.corals.generate import CoralFactory, TableCoralFactory -from nodes.node_wrangler import NodeWrangler -from nodes import node_utils -from placement.camera import ng_dist2camera -from placement.instance_scatter import scatter_instances +from infinigen.core.placement.factory import AssetFactory, make_asset_collection +from infinigen.assets.corals.generate import CoralFactory, TableCoralFactory + +from infinigen.core.placement.instance_scatter import scatter_instances def apply(obj, scale=1, density=5., n=12, selection=None, horizontal=False, **kwargs): @@ -42,12 +40,6 @@ def apply_horizontal(obj, scale=1, density=5., n=4, selection=None): corals = make_asset_collection(factories, name='coral', weights=np.random.uniform(0.8, 1, len(factories)), n=n, verbose=True) - - def scaling(nw): - basic = nw.uniform(1. * scale, 2. * scale) - camera_based = nw.build_float_curve(nw.new_node(ng_dist2camera().name), [(0, .2), (4, 1)]) - return nw.vector_math('MINIMUM', basic, camera_based) - r = np.deg2rad(10) scatter_obj = scatter_instances( base_obj=obj, collection=corals, diff --git a/infinigen/assets/scatters/decorative_plants.py b/infinigen/assets/scatters/decorative_plants.py index 78530d788..05d63db8c 100644 --- a/infinigen/assets/scatters/decorative_plants.py +++ b/infinigen/assets/scatters/decorative_plants.py @@ -8,14 +8,14 @@ from numpy.random import uniform as U -from placement.factory import AssetFactory, make_asset_collection -from placement.instance_scatter import scatter_instances -from placement import detail -from nodes import node_utils +from infinigen.core.placement.factory import AssetFactory, make_asset_collection +from infinigen.core.placement.instance_scatter import scatter_instances +from infinigen.core.placement import detail +from infinigen.core.nodes import node_utils -from assets.small_plants import succulent +from infinigen.assets.small_plants import succulent -from surfaces.scatters.utils.wind import wind +from infinigen.assets.scatters.utils.wind import wind def apply(obj, n=4, selection=None, **kwargs): diff --git a/infinigen/assets/scatters/fern.py b/infinigen/assets/scatters/fern.py index 0c6e69c82..74e89c53d 100644 --- a/infinigen/assets/scatters/fern.py +++ b/infinigen/assets/scatters/fern.py @@ -5,13 +5,13 @@ import numpy as np -from placement.instance_scatter import scatter_instances -from placement.factory import AssetFactory, make_asset_collection +from infinigen.core.placement.instance_scatter import scatter_instances +from infinigen.core.placement.factory import AssetFactory, make_asset_collection -from assets.small_plants.fern import FernFactory +from infinigen.assets.small_plants.fern import FernFactory -from util.random import random_general as rg -from surfaces.scatters.utils.wind import wind +from infinigen.core.util.random import random_general as rg +from infinigen.assets.scatters.utils.wind import wind def apply(obj, selection=None, density=('uniform', 1, 6), **kwargs): diff --git a/infinigen/assets/scatters/flowerplant.py b/infinigen/assets/scatters/flowerplant.py index 772edcf97..e2ecc3e74 100644 --- a/infinigen/assets/scatters/flowerplant.py +++ b/infinigen/assets/scatters/flowerplant.py @@ -8,16 +8,16 @@ from numpy.random import uniform, normal from mathutils import Vector -from util import blender as butil -from placement.instance_scatter import scatter_instances -from nodes.node_wrangler import Nodes, NodeWrangler -from surfaces import surface -from nodes import node_utils -from placement.factory import AssetFactory, make_asset_collection -from assets.grassland.flowerplant import FlowerPlantFactory -from surfaces.templates import simple_greenery - -from surfaces.scatters.utils.wind import wind +from infinigen.core.util import blender as butil +from infinigen.core.placement.instance_scatter import scatter_instances +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core import surface +from infinigen.core.nodes import node_utils +from infinigen.core.placement.factory import AssetFactory, make_asset_collection +from infinigen.assets.grassland.flowerplant import FlowerPlantFactory +from infinigen.assets.materials import simple_greenery + +from infinigen.assets.scatters.utils.wind import wind def apply(obj, selection=None, density=1.0): diff --git a/infinigen/assets/scatters/grass.py b/infinigen/assets/scatters/grass.py index fd7b13ae6..07bf68fb3 100644 --- a/infinigen/assets/scatters/grass.py +++ b/infinigen/assets/scatters/grass.py @@ -12,20 +12,20 @@ from numpy.random import uniform as U from mathutils import Vector -from util import blender as butil +from infinigen.core.util import blender as butil -from placement.factory import AssetFactory, make_asset_collection -from placement.instance_scatter import scatter_instances -from nodes.node_wrangler import Nodes, NodeWrangler -from surfaces import surface +from infinigen.core.placement.factory import AssetFactory, make_asset_collection +from infinigen.core.placement.instance_scatter import scatter_instances +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core import surface -from surfaces.templates import simple_greenery, grass_blade_texture +from infinigen.assets.materials import simple_greenery, grass_blade_texture -from assets.grassland.grass_tuft import GrassTuftFactory +from infinigen.assets.grassland.grass_tuft import GrassTuftFactory -from surfaces.scatters.utils.wind import wind +from infinigen.assets.scatters.utils.wind import wind def scale_grass(nw: NodeWrangler): random_scaling = nw.new_node(Nodes.RandomValue, input_kwargs={0: Vector((1.,1.,1.)), 1: Vector((1.2,1.2,2.))}, attrs={"data_type":'FLOAT_VECTOR'}) diff --git a/infinigen/assets/scatters/ground_leaves.py b/infinigen/assets/scatters/ground_leaves.py index 59416305b..35f00b5bd 100644 --- a/infinigen/assets/scatters/ground_leaves.py +++ b/infinigen/assets/scatters/ground_leaves.py @@ -7,10 +7,10 @@ from numpy.random import uniform as U from mathutils import Vector -from placement.instance_scatter import scatter_instances -from nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.placement.instance_scatter import scatter_instances +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler -from assets.trees.generate import random_leaf_collection +from infinigen.assets.trees.generate import random_leaf_collection def apply(obj, selection=None, density=70, season=None, **kwargs): leaf_col=random_leaf_collection(season=season) diff --git a/infinigen/assets/scatters/ground_mushroom.py b/infinigen/assets/scatters/ground_mushroom.py index 4cdae6633..fc7c6265c 100644 --- a/infinigen/assets/scatters/ground_mushroom.py +++ b/infinigen/assets/scatters/ground_mushroom.py @@ -7,10 +7,10 @@ import numpy as np from numpy.random import uniform as U -from assets.mushroom import MushroomFactory -from nodes.node_wrangler import NodeWrangler -from placement.factory import AssetFactory, make_asset_collection -from placement.instance_scatter import scatter_instances +from infinigen.assets.mushroom import MushroomFactory +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core.placement.factory import AssetFactory, make_asset_collection +from infinigen.core.placement.instance_scatter import scatter_instances class Mushrooms: diff --git a/infinigen/assets/scatters/ground_twigs.py b/infinigen/assets/scatters/ground_twigs.py index 4a6ab1ef4..2dee88b0b 100644 --- a/infinigen/assets/scatters/ground_twigs.py +++ b/infinigen/assets/scatters/ground_twigs.py @@ -11,15 +11,15 @@ from numpy.random import uniform as U from mathutils import Vector -from util import blender as butil -from util.blender import deep_clone_obj +from infinigen.core.util import blender as butil +from infinigen.core.util.blender import deep_clone_obj -from nodes import node_utils -from placement.instance_scatter import scatter_instances -from nodes.node_wrangler import Nodes, NodeWrangler -from surfaces import surface +from infinigen.core.nodes import node_utils +from infinigen.core.placement.instance_scatter import scatter_instances +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core import surface -from assets.trees.generate import make_twig_collection, random_species +from infinigen.assets.trees.generate import make_twig_collection, random_species from .chopped_trees import approx_settle_transform def apply(obj, selection=None, n_leaf=0, n_twig=10, **kwargs): diff --git a/infinigen/assets/scatters/ivy.py b/infinigen/assets/scatters/ivy.py index bfacad008..04a47ea55 100644 --- a/infinigen/assets/scatters/ivy.py +++ b/infinigen/assets/scatters/ivy.py @@ -10,19 +10,19 @@ import numpy as np from numpy.random import uniform -from assets.leaves.leaf_maple import LeafFactoryMaple -from assets.trees.generate import random_season -from assets.utils.decorate import assign_material, fix_tree -from assets.utils.nodegroup import geo_base_selection, geo_radius -from assets.utils.shortest_path import geo_shortest_path -from nodes.node_info import Nodes -from placement.factory import AssetFactory, make_asset_collection -from nodes.node_wrangler import NodeWrangler -from surfaces import surface -from surfaces.surface import shaderfunc_to_material -from surfaces.templates.simple_brownish import shader_simple_brown -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.leaves.leaf_maple import LeafFactoryMaple +from infinigen.assets.trees.generate import random_season +from infinigen.assets.utils.decorate import assign_material, fix_tree +from infinigen.assets.utils.nodegroup import geo_base_selection, geo_radius +from infinigen.assets.utils.shortest_path import geo_shortest_path +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.placement.factory import AssetFactory, make_asset_collection +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core import surface +from infinigen.core.surface import shaderfunc_to_material +from infinigen.assets.materials.simple_brownish import shader_simple_brown +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup def geo_leaf(nw: NodeWrangler, leaves): diff --git a/infinigen/assets/scatters/jellyfish.py b/infinigen/assets/scatters/jellyfish.py index 4a5646d8e..1096eca51 100644 --- a/infinigen/assets/scatters/jellyfish.py +++ b/infinigen/assets/scatters/jellyfish.py @@ -7,10 +7,10 @@ import numpy as np from numpy.random import uniform as U -from assets.jellyfish import JellyfishFactory -from nodes.node_wrangler import NodeWrangler -from placement.factory import AssetFactory, make_asset_collection -from placement.instance_scatter import scatter_instances +from infinigen.assets.creatures.jellyfish import JellyfishFactory +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core.placement.factory import AssetFactory, make_asset_collection +from infinigen.core.placement.instance_scatter import scatter_instances def apply(obj, scale=1, density=1., n=10, selection=None): diff --git a/infinigen/assets/scatters/lichen.py b/infinigen/assets/scatters/lichen.py index ac701f2f5..1bd79605a 100644 --- a/infinigen/assets/scatters/lichen.py +++ b/infinigen/assets/scatters/lichen.py @@ -11,17 +11,17 @@ import numpy as np from numpy.random import uniform, normal as N -from assets.utils.decorate import assign_material -from nodes.node_wrangler import Nodes, NodeWrangler -from placement.factory import AssetFactory, make_asset_collection -from placement.instance_scatter import scatter_instances -from surfaces import surface -from placement.factory import AssetFactory -from infinigen_gpl.extras.diff_growth import build_diff_growth -from assets.utils.object import data2mesh -from assets.utils.mesh import polygon_angles -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.utils.decorate import assign_material +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.placement.factory import AssetFactory, make_asset_collection +from infinigen.core.placement.instance_scatter import scatter_instances +from infinigen.core import surface +from infinigen.core.placement.factory import AssetFactory +from infinigen.infinigen_gpl.extras.diff_growth import build_diff_growth +from infinigen.assets.utils.object import data2mesh +from infinigen.assets.utils.mesh import polygon_angles +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup from infinigen.assets.debris import LichenFactory diff --git a/infinigen/assets/scatters/mollusk.py b/infinigen/assets/scatters/mollusk.py index 4ade76e4f..1e2542036 100644 --- a/infinigen/assets/scatters/mollusk.py +++ b/infinigen/assets/scatters/mollusk.py @@ -6,14 +6,14 @@ import numpy as np -from assets.mollusk import MolluskFactory -from assets.utils.misc import CountInstance -from placement.factory import AssetFactory, make_asset_collection -from assets.utils.decorate import toggle_hide -from util import blender as butil -from nodes import node_utils -from placement.instance_scatter import scatter_instances -from surfaces import surface +from infinigen.assets.mollusk import MolluskFactory +from infinigen.assets.utils.misc import CountInstance +from infinigen.core.placement.factory import AssetFactory, make_asset_collection +from infinigen.assets.utils.decorate import toggle_hide +from infinigen.core.util import blender as butil +from infinigen.core.nodes import node_utils +from infinigen.core.placement.instance_scatter import scatter_instances +from infinigen.core import surface def apply(obj, scale=0.4, density=1., n=10, selection=None): diff --git a/infinigen/assets/scatters/monocot.py b/infinigen/assets/scatters/monocot.py index 321aba1da..78ee7ebbd 100644 --- a/infinigen/assets/scatters/monocot.py +++ b/infinigen/assets/scatters/monocot.py @@ -7,12 +7,11 @@ import numpy as np from numpy.random import uniform as U -from assets.monocot.generate import MonocotFactory -from nodes.node_wrangler import NodeWrangler -from placement.camera import ng_dist2camera -from placement.instance_scatter import scatter_instances -from placement.factory import AssetFactory, make_asset_collection -from surfaces.scatters.utils.wind import wind +from infinigen.assets.monocot.generate import MonocotFactory +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core.placement.instance_scatter import scatter_instances +from infinigen.core.placement.factory import AssetFactory, make_asset_collection +from infinigen.assets.scatters.utils.wind import wind def apply(obj, n=4, grass=None, selection=None, **kwargs): diff --git a/infinigen/assets/scatters/mushroom.py b/infinigen/assets/scatters/mushroom.py index b258b985f..80661cddb 100644 --- a/infinigen/assets/scatters/mushroom.py +++ b/infinigen/assets/scatters/mushroom.py @@ -12,10 +12,10 @@ from mathutils import Matrix from numpy.random import uniform -from assets.mushroom import MushroomFactory -from util import blender as butil -from nodes.node_wrangler import Nodes, NodeWrangler -from surfaces import surface +from infinigen.assets.mushroom import MushroomFactory +from infinigen.core.util import blender as butil +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core import surface def geo_skeleton(nw: NodeWrangler, base_obj, selection, threshold=.05): diff --git a/infinigen/assets/scatters/rocks.py b/infinigen/assets/scatters/pebbles.py similarity index 70% rename from infinigen/assets/scatters/rocks.py rename to infinigen/assets/scatters/pebbles.py index d22ed250d..0cc8f4670 100644 --- a/infinigen/assets/scatters/rocks.py +++ b/infinigen/assets/scatters/pebbles.py @@ -9,13 +9,13 @@ import numpy as np from numpy.random import uniform as U -from nodes.node_wrangler import Nodes -from placement.instance_scatter import scatter_instances -from placement.factory import AssetFactory, make_asset_collection +from infinigen.core.nodes.node_wrangler import Nodes +from infinigen.core.placement.instance_scatter import scatter_instances +from infinigen.core.placement.factory import AssetFactory, make_asset_collection -from surfaces import surface -from util import blender as butil -from assets.blender_rock import BlenderRockFactory +from infinigen.core import surface +from infinigen.core.util import blender as butil +from infinigen.assets.rocks.blender_rock import BlenderRockFactory def apply(obj, n=5, detail=3, selection=None, **kwargs): diff --git a/infinigen/assets/scatters/pinecone.py b/infinigen/assets/scatters/pinecone.py index 56b7d8bac..9b0d1b19b 100644 --- a/infinigen/assets/scatters/pinecone.py +++ b/infinigen/assets/scatters/pinecone.py @@ -7,12 +7,12 @@ import numpy as np from numpy.random import uniform as U -from assets.monocot.pinecone import PineconeFactory -from nodes.node_wrangler import NodeWrangler -from placement.factory import AssetFactory, make_asset_collection -from placement.instance_scatter import scatter_instances +from infinigen.assets.monocot.pinecone import PineconeFactory +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core.placement.factory import AssetFactory, make_asset_collection +from infinigen.core.placement.instance_scatter import scatter_instances -from surfaces.scatters.chopped_trees import approx_settle_transform +from infinigen.assets.scatters.chopped_trees import approx_settle_transform def apply(obj, n=5, selection=None): n_species = np.random.randint(2, 3) diff --git a/infinigen/assets/scatters/seashells.py b/infinigen/assets/scatters/seashells.py index 589bcd85e..2a59b1334 100644 --- a/infinigen/assets/scatters/seashells.py +++ b/infinigen/assets/scatters/seashells.py @@ -7,12 +7,12 @@ import numpy as np from numpy.random import uniform as U -from assets.mollusk import MolluskFactory -from placement.factory import AssetFactory, make_asset_collection -from placement.instance_scatter import scatter_instances -from surfaces.scatters.chopped_trees import approx_settle_transform +from infinigen.assets.mollusk import MolluskFactory +from infinigen.core.placement.factory import AssetFactory, make_asset_collection +from infinigen.core.placement.instance_scatter import scatter_instances +from infinigen.assets.scatters.chopped_trees import approx_settle_transform -from util.random import random_general as rg +from infinigen.core.util.random import random_general as rg def apply(obj, density=('uniform', 0.2, 1.7), n=10, selection=None): n_species = np.random.randint(4, 6) diff --git a/infinigen/assets/scatters/seaweed.py b/infinigen/assets/scatters/seaweed.py index 75e7dce26..4aa7456ae 100644 --- a/infinigen/assets/scatters/seaweed.py +++ b/infinigen/assets/scatters/seaweed.py @@ -7,11 +7,10 @@ import numpy as np from numpy.random import uniform as U -from assets.seaweed import SeaweedFactory -from nodes.node_wrangler import NodeWrangler -from placement.camera import ng_dist2camera -from placement.instance_scatter import scatter_instances -from placement.factory import AssetFactory, make_asset_collection +from infinigen.assets.underwater.seaweed import SeaweedFactory +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core.placement.instance_scatter import scatter_instances +from infinigen.core.placement.factory import AssetFactory, make_asset_collection def apply(obj, scale=1, density=1., n=5, selection=None, **kwargs): diff --git a/infinigen/assets/scatters/slime_mold.py b/infinigen/assets/scatters/slime_mold.py index e8673379a..5ae38a7eb 100644 --- a/infinigen/assets/scatters/slime_mold.py +++ b/infinigen/assets/scatters/slime_mold.py @@ -8,15 +8,15 @@ import numpy as np from numpy.random import uniform -from assets.utils.decorate import assign_material, treeify -from assets.utils.nodegroup import geo_base_selection, geo_radius -from assets.utils.shortest_path import geo_shortest_path -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from surfaces import surface -from assets.utils.misc import build_color_ramp -from surfaces.surface import shaderfunc_to_material -from util import blender as butil +from infinigen.assets.utils.decorate import assign_material, treeify +from infinigen.assets.utils.nodegroup import geo_base_selection, geo_radius +from infinigen.assets.utils.shortest_path import geo_shortest_path +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core import surface +from infinigen.assets.utils.misc import build_color_ramp +from infinigen.core.surface import shaderfunc_to_material +from infinigen.core.util import blender as butil def shader_mold(nw: NodeWrangler, base_hue): diff --git a/infinigen/assets/scatters/snow_layer.py b/infinigen/assets/scatters/snow_layer.py index f4e1ce377..c9efef17f 100644 --- a/infinigen/assets/scatters/snow_layer.py +++ b/infinigen/assets/scatters/snow_layer.py @@ -9,13 +9,12 @@ from numpy.random import uniform, normal -from nodes.node_wrangler import Nodes, NodeWrangler -from surfaces import surface -from util import blender as butil -from nodes import node_utils +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core import surface +from infinigen.core.util import blender as butil +from infinigen.core.nodes import node_utils -from infinigen_gpl.surfaces import snow -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class Snowlayer: def __init__(self): diff --git a/infinigen/assets/scatters/urchin.py b/infinigen/assets/scatters/urchin.py index e6ea9f687..54fd536a9 100644 --- a/infinigen/assets/scatters/urchin.py +++ b/infinigen/assets/scatters/urchin.py @@ -7,11 +7,10 @@ import numpy as np from numpy.random import uniform as U -from assets.urchin import UrchinFactory -from nodes.node_wrangler import NodeWrangler -from placement.factory import AssetFactory, make_asset_collection -from placement.camera import ng_dist2camera -from placement.instance_scatter import scatter_instances +from infinigen.assets.underwater.urchin import UrchinFactory +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core.placement.factory import AssetFactory, make_asset_collection +from infinigen.core.placement.instance_scatter import scatter_instances def apply(obj, n=5, selection=None): diff --git a/infinigen/assets/scatters/utils/cluster.py b/infinigen/assets/scatters/utils/cluster.py index 2df4ca764..759fb2959 100644 --- a/infinigen/assets/scatters/utils/cluster.py +++ b/infinigen/assets/scatters/utils/cluster.py @@ -7,10 +7,10 @@ import numpy as np from numpy.random import uniform -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from placement.instance_scatter import bucketed_instance, camera_cull_points -from surfaces import surface +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core.placement.instance_scatter import bucketed_instance, camera_cull_points +from infinigen.core import surface def select_points(nw: NodeWrangler, geometry, density, selection, radius, min_distance): diff --git a/infinigen/assets/scatters/utils/selection.py b/infinigen/assets/scatters/utils/selection.py index 8794938bd..67622b2c8 100644 --- a/infinigen/assets/scatters/utils/selection.py +++ b/infinigen/assets/scatters/utils/selection.py @@ -7,9 +7,9 @@ import numpy as np from numpy.random import uniform -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from util.math import FixedSeed, int_hash +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core.util.math import FixedSeed, int_hash def scatter_lower(nw: NodeWrangler, height_range=(.5, 2), fill_range=(.0, .8), noise_scale=.4): diff --git a/infinigen/assets/scatters/utils/wind.py b/infinigen/assets/scatters/utils/wind.py index bb43ac02d..a8d3181fc 100644 --- a/infinigen/assets/scatters/utils/wind.py +++ b/infinigen/assets/scatters/utils/wind.py @@ -11,7 +11,7 @@ from numpy.random import uniform as U, normal as N, randint from mathutils import Vector -from nodes.node_wrangler import Nodes +from infinigen.core.nodes.node_wrangler import Nodes def wind_rotation(nw, speed=1.0, direction=None, scale=1.0, strength=30): diff --git a/infinigen/assets/small_plants/fern.py b/infinigen/assets/small_plants/fern.py index 4f0bdbe45..ab15536f3 100644 --- a/infinigen/assets/small_plants/fern.py +++ b/infinigen/assets/small_plants/fern.py @@ -11,17 +11,17 @@ import gin import numpy as np from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler -from assets.small_plants import leaf_general as Leaf +from infinigen.assets.small_plants import leaf_general as Leaf -from nodes import node_utils -from placement.factory import AssetFactory -from util import blender as butil -from surfaces import surface -from surfaces.templates import simple_greenery +from infinigen.core.nodes import node_utils +from infinigen.core.placement.factory import AssetFactory +from infinigen.core.util import blender as butil +from infinigen.core import surface +from infinigen.assets.materials import simple_greenery -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.utils.tag import tag_object, tag_nodegroup def random_pinnae_level2_curvature(): z_max_curvature = uniform(0.3, 0.45, (1,))[0] diff --git a/infinigen/assets/small_plants/leaf_general.py b/infinigen/assets/small_plants/leaf_general.py index 55f72256b..2305e6f62 100644 --- a/infinigen/assets/small_plants/leaf_general.py +++ b/infinigen/assets/small_plants/leaf_general.py @@ -9,14 +9,14 @@ import bpy -from assets.trees.utils import helper, mesh, materials +from infinigen.assets.trees.utils import helper, mesh, materials -from placement.factory import AssetFactory -from util import blender as butil +from infinigen.core.placement.factory import AssetFactory +from infinigen.core.util import blender as butil C = bpy.context D = bpy.data -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class LeafFactory(AssetFactory): diff --git a/infinigen/assets/small_plants/leaf_heart.py b/infinigen/assets/small_plants/leaf_heart.py index 9b373bc81..e4efb4b9c 100644 --- a/infinigen/assets/small_plants/leaf_heart.py +++ b/infinigen/assets/small_plants/leaf_heart.py @@ -6,13 +6,13 @@ import numpy as np import bpy -from assets.trees.utils import mesh -from placement.factory import AssetFactory -from util import blender as butil +from infinigen.assets.trees.utils import mesh +from infinigen.core.placement.factory import AssetFactory +from infinigen.core.util import blender as butil C = bpy.context D = bpy.data -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class LeafHeartFactory(AssetFactory): scale = 0.2 diff --git a/infinigen/assets/small_plants/num_leaf_grass.py b/infinigen/assets/small_plants/num_leaf_grass.py index b0ad0d9b6..1a81f994d 100644 --- a/infinigen/assets/small_plants/num_leaf_grass.py +++ b/infinigen/assets/small_plants/num_leaf_grass.py @@ -7,16 +7,16 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from surfaces import surface -from placement.factory import AssetFactory -from util import blender as butil -from assets.small_plants.leaf_general import LeafFactory -from assets.small_plants.leaf_heart import LeafHeartFactory -from surfaces.templates import simple_greenery +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core import surface +from infinigen.core.placement.factory import AssetFactory +from infinigen.core.util import blender as butil +from infinigen.assets.small_plants.leaf_general import LeafFactory +from infinigen.assets.small_plants.leaf_heart import LeafHeartFactory +from infinigen.assets.materials import simple_greenery import numpy as np -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.utils.tag import tag_object, tag_nodegroup @node_utils.to_nodegroup('nodegroup_leafon_stem', singleton=False, type='GeometryNodeTree') def nodegroup_leaf_on_stem(nw: NodeWrangler, z_rotation=(0, 0, 0,), leaf_scale=1.0, leaf=None): diff --git a/infinigen/assets/small_plants/snake_plant.py b/infinigen/assets/small_plants/snake_plant.py index a109cb04f..35cc04540 100644 --- a/infinigen/assets/small_plants/snake_plant.py +++ b/infinigen/assets/small_plants/snake_plant.py @@ -7,14 +7,14 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from surfaces import surface -from surfaces.templates import snake_plant -from placement.factory import AssetFactory +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core import surface +from infinigen.assets.materials import snake_plant +from infinigen.core.placement.factory import AssetFactory import numpy as np -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup @node_utils.to_nodegroup('nodegroup_pedal_thickness', singleton=False, type='GeometryNodeTree') def nodegroup_pedal_thickness(nw: NodeWrangler): diff --git a/infinigen/assets/small_plants/spider_plant.py b/infinigen/assets/small_plants/spider_plant.py index 25ee7d941..39ecd8b95 100644 --- a/infinigen/assets/small_plants/spider_plant.py +++ b/infinigen/assets/small_plants/spider_plant.py @@ -7,16 +7,16 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface -from placement.factory import AssetFactory -from surfaces.templates import spider_plant +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface +from infinigen.core.placement.factory import AssetFactory +from infinigen.assets.materials import spider_plant import numpy as np -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup @node_utils.to_nodegroup('nodegroup_set_leaf_countour', singleton=False, type='GeometryNodeTree') def nodegroup_set_leaf_countour(nw: NodeWrangler): diff --git a/infinigen/assets/small_plants/succulent.py b/infinigen/assets/small_plants/succulent.py index 81d79435f..34010a49d 100644 --- a/infinigen/assets/small_plants/succulent.py +++ b/infinigen/assets/small_plants/succulent.py @@ -7,16 +7,16 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface -from surfaces.templates import succulent -from placement.factory import AssetFactory +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface +from infinigen.assets.materials import succulent +from infinigen.core.placement.factory import AssetFactory import numpy as np -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup @node_utils.to_nodegroup('nodegroup_pedal_cross_contour_top', singleton=False, type='GeometryNodeTree') def nodegroup_pedal_cross_contour_top(nw: NodeWrangler): diff --git a/infinigen/assets/surfaces/__init__.py b/infinigen/assets/surfaces/__init__.py deleted file mode 100644 index 292c27b44..000000000 --- a/infinigen/assets/surfaces/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from . import * -from infinigen_gpl.surfaces import * diff --git a/infinigen/assets/trees/__init__.py b/infinigen/assets/trees/__init__.py index 0fcb294b9..a45582997 100644 --- a/infinigen/assets/trees/__init__.py +++ b/infinigen/assets/trees/__init__.py @@ -1,2 +1,2 @@ -from .generate import BushFactory, TreeFactory +from .generate import BushFactory, TreeFactory, random_season, random_leaf_collection from .tree_flower import TreeFlowerFactory diff --git a/infinigen/assets/trees/branch.py b/infinigen/assets/trees/branch.py index efc4da83d..80d13811f 100644 --- a/infinigen/assets/trees/branch.py +++ b/infinigen/assets/trees/branch.py @@ -7,15 +7,15 @@ import mathutils import numpy as np from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface -from util.math import FixedSeed -from placement.factory import AssetFactory -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.util.math import FixedSeed +from infinigen.core.placement.factory import AssetFactory +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup @node_utils.to_nodegroup('nodegroup_surface_bump', singleton=False, type='GeometryNodeTree') def nodegroup_surface_bump(nw: NodeWrangler): diff --git a/infinigen/assets/trees/generate.py b/infinigen/assets/trees/generate.py index 8801c8811..734dbb455 100644 --- a/infinigen/assets/trees/generate.py +++ b/infinigen/assets/trees/generate.py @@ -13,28 +13,28 @@ import bpy -from assets.trees import tree, treeconfigs, branch -from assets.leaves import leaf, leaf_v2, leaf_pine, leaf_ginko, leaf_broadleaf, leaf_maple -from assets.fruits import apple, blackberry, coconutgreen, durian, starfruit, strawberry, compositional_fruit -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler +from infinigen.assets.trees import tree, treeconfigs, branch +from infinigen.assets.leaves import leaf, leaf_v2, leaf_pine, leaf_ginko, leaf_broadleaf, leaf_maple +from infinigen.assets.fruits import apple, blackberry, coconutgreen, durian, starfruit, strawberry, compositional_fruit +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler from . import tree_flower -from util import blender as butil -from util.math import FixedSeed -from util.blender import deep_clone_obj -from util import camera as camera_util +from infinigen.core.util import blender as butil +from infinigen.core.util.math import FixedSeed +from infinigen.core.util.blender import deep_clone_obj +from infinigen.core.util import camera as camera_util -from placement.factory import AssetFactory, make_asset_collection -from placement import detail -from placement.split_in_view import split_inview +from infinigen.core.placement.factory import AssetFactory, make_asset_collection +from infinigen.core.placement import detail +from infinigen.core.placement.split_in_view import split_inview from infinigen.core import surface -from assets.cloud.generate import CloudFactory +from infinigen.assets.weather.cloud.generate import CloudFactory from ..utils.decorate import write_attribute -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.utils.tag import tag_object, tag_nodegroup logger = logging.getLogger('trees') diff --git a/infinigen/assets/trees/tree.py b/infinigen/assets/trees/tree.py index d283eafbc..9de5e3e53 100644 --- a/infinigen/assets/trees/tree.py +++ b/infinigen/assets/trees/tree.py @@ -14,10 +14,10 @@ from .utils import helper, mesh from .utils import geometrynodes as gn -from assets.leaves import leaf +from infinigen.assets.leaves import leaf -from nodes.node_wrangler import Nodes -from util import blender as butil +from infinigen.core.nodes.node_wrangler import Nodes +from infinigen.core.util import blender as butil from ..utils.object import data2mesh, mesh2obj C = bpy.context diff --git a/infinigen/assets/trees/tree_flower.py b/infinigen/assets/trees/tree_flower.py index cf0420a85..81b1072a6 100644 --- a/infinigen/assets/trees/tree_flower.py +++ b/infinigen/assets/trees/tree_flower.py @@ -12,14 +12,14 @@ from numpy.random import uniform, normal import numpy as np -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils, color -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils, color +from infinigen.core import surface -from placement.factory import AssetFactory -from util import blender as butil -from util.math import FixedSeed, dict_lerp -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.placement.factory import AssetFactory +from infinigen.core.util import blender as butil +from infinigen.core.util.math import FixedSeed, dict_lerp +from infinigen.assets.utils.tag import tag_object, tag_nodegroup @node_utils.to_nodegroup('nodegroup_polar_to_cart_old', singleton=True) def nodegroup_polar_to_cart_old(nw): diff --git a/infinigen/assets/trees/utils/geometrynodes.py b/infinigen/assets/trees/utils/geometrynodes.py index 3408aaa54..ebf505947 100644 --- a/infinigen/assets/trees/utils/geometrynodes.py +++ b/infinigen/assets/trees/utils/geometrynodes.py @@ -11,8 +11,8 @@ from . import helper, mesh from .materials import new_link -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils C = bpy.context D = bpy.data diff --git a/infinigen/assets/trees/utils/helper.py b/infinigen/assets/trees/utils/helper.py index 7670de78e..55a724a4c 100644 --- a/infinigen/assets/trees/utils/helper.py +++ b/infinigen/assets/trees/utils/helper.py @@ -7,7 +7,7 @@ import bpy import numpy as np -from util.logging import Suppress +from infinigen.core.util.logging import Suppress C = bpy.context D = bpy.data diff --git a/infinigen/assets/tropic_plants/coconut_tree.py b/infinigen/assets/tropic_plants/coconut_tree.py index f1ef1db28..138c4d12b 100644 --- a/infinigen/assets/tropic_plants/coconut_tree.py +++ b/infinigen/assets/tropic_plants/coconut_tree.py @@ -7,15 +7,15 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from surfaces import surface -from placement.factory import AssetFactory +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core import surface +from infinigen.core.placement.factory import AssetFactory import numpy as np -from nodes.color import hsv2rgba -from util import blender as butil -from assets.tropic_plants.leaf_palm_tree import LeafPalmTreeFactory -from assets.fruits.coconutgreen import FruitFactoryCoconutgreen +from infinigen.core.nodes.color import hsv2rgba +from infinigen.core.util import blender as butil +from infinigen.assets.tropic_plants.leaf_palm_tree import LeafPalmTreeFactory +from infinigen.assets.fruits.coconutgreen import FruitFactoryCoconutgreen @node_utils.to_nodegroup('nodegroup_pedal_cross_contour_top', singleton=False, type='GeometryNodeTree') diff --git a/infinigen/assets/tropic_plants/leaf_banana_tree.py b/infinigen/assets/tropic_plants/leaf_banana_tree.py index 816f06ed8..661901362 100644 --- a/infinigen/assets/tropic_plants/leaf_banana_tree.py +++ b/infinigen/assets/tropic_plants/leaf_banana_tree.py @@ -7,15 +7,15 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from surfaces import surface -from placement.factory import AssetFactory +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core import surface +from infinigen.core.placement.factory import AssetFactory import numpy as np -from nodes.color import hsv2rgba -from assets.tropic_plants.tropic_plant_utils import * -from util import blender as butil -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.nodes.color import hsv2rgba +from infinigen.assets.tropic_plants.tropic_plant_utils import * +from infinigen.core.util import blender as butil +from infinigen.assets.utils.tag import tag_object, tag_nodegroup @node_utils.to_nodegroup('nodegroup_nodegroup_apply_wave', singleton=False, type='GeometryNodeTree') diff --git a/infinigen/assets/tropic_plants/leaf_palm_plant.py b/infinigen/assets/tropic_plants/leaf_palm_plant.py index c0c72f9ff..13cfe60f9 100644 --- a/infinigen/assets/tropic_plants/leaf_palm_plant.py +++ b/infinigen/assets/tropic_plants/leaf_palm_plant.py @@ -7,8 +7,8 @@ import bpy import mathutils from numpy.random import uniform -from assets.tropic_plants.tropic_plant_utils import * -from util import blender as butil +from infinigen.assets.tropic_plants.tropic_plant_utils import * +from infinigen.core.util import blender as butil @node_utils.to_nodegroup('nodegroup_nodegroup_apply_wave', singleton=False, type='GeometryNodeTree') diff --git a/infinigen/assets/tropic_plants/leaf_palm_tree.py b/infinigen/assets/tropic_plants/leaf_palm_tree.py index 87802c8db..74cbe2035 100644 --- a/infinigen/assets/tropic_plants/leaf_palm_tree.py +++ b/infinigen/assets/tropic_plants/leaf_palm_tree.py @@ -4,8 +4,8 @@ # Authors: Beining Han -from assets.tropic_plants.tropic_plant_utils import * -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.tropic_plants.tropic_plant_utils import * +from infinigen.assets.utils.tag import tag_object, tag_nodegroup @node_utils.to_nodegroup('nodegroup_nodegroup_apply_wave', singleton=False, type='GeometryNodeTree') def nodegroup_nodegroup_apply_wave(nw: NodeWrangler): diff --git a/infinigen/assets/tropic_plants/palm_tree.py b/infinigen/assets/tropic_plants/palm_tree.py index 5197ba01b..53983a046 100644 --- a/infinigen/assets/tropic_plants/palm_tree.py +++ b/infinigen/assets/tropic_plants/palm_tree.py @@ -8,14 +8,14 @@ import mathutils import gin from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from surfaces import surface -from placement.factory import AssetFactory +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core import surface +from infinigen.core.placement.factory import AssetFactory import numpy as np -from nodes.color import hsv2rgba -from util import blender as butil -from assets.tropic_plants.leaf_palm_plant import LeafPalmPlantFactory +from infinigen.core.nodes.color import hsv2rgba +from infinigen.core.util import blender as butil +from infinigen.assets.tropic_plants.leaf_palm_plant import LeafPalmPlantFactory @node_utils.to_nodegroup('nodegroup_pedal_cross_contour_top', singleton=False, type='GeometryNodeTree') diff --git a/infinigen/assets/tropic_plants/tropic_plant_utils.py b/infinigen/assets/tropic_plants/tropic_plant_utils.py index 3e9b72e86..0f3a95fe3 100644 --- a/infinigen/assets/tropic_plants/tropic_plant_utils.py +++ b/infinigen/assets/tropic_plants/tropic_plant_utils.py @@ -7,13 +7,13 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from surfaces import surface -from placement.factory import AssetFactory +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core import surface +from infinigen.core.placement.factory import AssetFactory import numpy as np -from nodes.color import hsv2rgba -from util import blender as butil +from infinigen.core.nodes.color import hsv2rgba +from infinigen.core.util import blender as butil @node_utils.to_nodegroup('nodegroup_node_group', singleton=False, type='GeometryNodeTree') diff --git a/infinigen/assets/underwater/__init__.py b/infinigen/assets/underwater/__init__.py new file mode 100644 index 000000000..0063ca67d --- /dev/null +++ b/infinigen/assets/underwater/__init__.py @@ -0,0 +1 @@ +from . import seaweed, urchin \ No newline at end of file diff --git a/infinigen/assets/underwater/seaweed.py b/infinigen/assets/underwater/seaweed.py index 871b52b24..48a150345 100644 --- a/infinigen/assets/underwater/seaweed.py +++ b/infinigen/assets/underwater/seaweed.py @@ -11,19 +11,19 @@ import numpy as np from numpy.random import uniform -from assets.creatures.animation.driver_repeated import repeated_driver -from assets.utils.decorate import assign_material, read_co, subsurface2face_size, write_co -from assets.utils.draw import make_circular_interp -import util.blender as butil -from placement.factory import AssetFactory -from infinigen_gpl.extras.diff_growth import build_diff_growth -from assets.utils.object import mesh2obj, data2mesh -from assets.utils.mesh import polygon_angles -from nodes.node_wrangler import NodeWrangler, Nodes -from surfaces import surface -from assets.utils.misc import build_color_ramp, log_uniform -from util.math import FixedSeed -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.assets.creatures.util.animation.driver_repeated import repeated_driver +from infinigen.assets.utils.decorate import assign_material, read_co, subsurface2face_size, write_co +from infinigen.assets.utils.draw import make_circular_interp +import infinigen.core.util.blender as butil +from infinigen.core.placement.factory import AssetFactory +from infinigen.infinigen_gpl.extras.diff_growth import build_diff_growth +from infinigen.assets.utils.object import mesh2obj, data2mesh +from infinigen.assets.utils.mesh import polygon_angles +from infinigen.core.nodes.node_wrangler import NodeWrangler, Nodes +from infinigen.core import surface +from infinigen.assets.utils.misc import build_color_ramp, log_uniform +from infinigen.core.util.math import FixedSeed +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class SeaweedFactory(AssetFactory): diff --git a/infinigen/assets/underwater/urchin.py b/infinigen/assets/underwater/urchin.py index dc9182de9..239bc5d18 100644 --- a/infinigen/assets/underwater/urchin.py +++ b/infinigen/assets/underwater/urchin.py @@ -8,18 +8,18 @@ import bpy from numpy.random import uniform -import util.blender as butil -from assets.creatures.animation.driver_repeated import repeated_driver -from assets.utils.object import new_icosphere -from assets.utils.decorate import assign_material, geo_extension, separate_loose -from assets.utils.misc import log_uniform -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from placement.detail import adapt_mesh_resolution -from placement.factory import AssetFactory -from surfaces import surface -from util.math import FixedSeed -from assets.utils.tag import tag_object, tag_nodegroup +import infinigen.core.util.blender as butil +from infinigen.assets.creatures.util.animation.driver_repeated import repeated_driver +from infinigen.assets.utils.object import new_icosphere +from infinigen.assets.utils.decorate import assign_material, geo_extension, separate_loose +from infinigen.assets.utils.misc import log_uniform +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core.placement.detail import adapt_mesh_resolution +from infinigen.core.placement.factory import AssetFactory +from infinigen.core import surface +from infinigen.core.util.math import FixedSeed +from infinigen.assets.utils.tag import tag_object, tag_nodegroup class UrchinFactory(AssetFactory): diff --git a/infinigen/assets/utils/decorate.py b/infinigen/assets/utils/decorate.py index e5f974c67..7d5596086 100644 --- a/infinigen/assets/utils/decorate.py +++ b/infinigen/assets/utils/decorate.py @@ -12,12 +12,12 @@ import numpy as np from numpy.random import uniform -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from surfaces import surface +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core import surface -from util import blender as butil -from util.blender import select_none +from infinigen.core.util import blender as butil +from infinigen.core.util.blender import select_none def multi_res(obj): diff --git a/infinigen/assets/utils/draw.py b/infinigen/assets/utils/draw.py index b19025b83..bc990839d 100644 --- a/infinigen/assets/utils/draw.py +++ b/infinigen/assets/utils/draw.py @@ -12,13 +12,13 @@ from numpy.random import uniform from scipy.interpolate import interp1d -from assets.utils.decorate import read_co, remove_vertices, separate_loose, write_attribute, write_co -from assets.utils.mesh import polygon_angles -from assets.utils.object import data2mesh, mesh2obj -from nodes.node_info import Nodes -from placement.detail import sharp_remesh_with_attrs -from surfaces.surface import read_attr_data -from util import blender as butil +from infinigen.assets.utils.decorate import read_co, remove_vertices, separate_loose, write_attribute, write_co +from infinigen.assets.utils.mesh import polygon_angles +from infinigen.assets.utils.object import data2mesh, mesh2obj +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.placement.detail import sharp_remesh_with_attrs +from infinigen.core.surface import read_attr_data +from infinigen.core.util import blender as butil def shape_by_angles(obj, angles, scales=None, displacements=None, method='quadratic'): diff --git a/infinigen/assets/utils/laplacian.py b/infinigen/assets/utils/laplacian.py index 921b3cf36..7e3a9a455 100644 --- a/infinigen/assets/utils/laplacian.py +++ b/infinigen/assets/utils/laplacian.py @@ -10,9 +10,9 @@ from numpy.random import uniform from skimage.measure import find_contours, marching_cubes from scipy.ndimage import convolve -from util import blender as butil +from infinigen.core.util import blender as butil -from assets.utils.object import data2mesh +from infinigen.assets.utils.object import data2mesh def mesh_grid(n, sizes): diff --git a/infinigen/assets/utils/mesh.py b/infinigen/assets/utils/mesh.py index 0d71adcce..8c2a73d35 100644 --- a/infinigen/assets/utils/mesh.py +++ b/infinigen/assets/utils/mesh.py @@ -8,11 +8,11 @@ import numpy as np from numpy.random import normal, uniform -from assets.utils.object import new_cube -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from surfaces import surface -from util import blender as butil +from infinigen.assets.utils.object import new_cube +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core import surface +from infinigen.core.util import blender as butil def build_prism_mesh(n=6, r_min=1., r_max=1.5, height=.3, tilt=.3): diff --git a/infinigen/assets/utils/misc.py b/infinigen/assets/utils/misc.py index 282354895..44559a9ca 100644 --- a/infinigen/assets/utils/misc.py +++ b/infinigen/assets/utils/misc.py @@ -8,8 +8,8 @@ import numpy as np from numpy.random import normal, uniform -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler class CountInstance: diff --git a/infinigen/assets/utils/nodegroup.py b/infinigen/assets/utils/nodegroup.py index e5102c39a..c130ed24f 100644 --- a/infinigen/assets/utils/nodegroup.py +++ b/infinigen/assets/utils/nodegroup.py @@ -9,11 +9,11 @@ import bpy import numpy as np -from assets.utils.decorate import toggle_hide -from nodes import node_utils -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from surfaces import surface +from infinigen.assets.utils.decorate import toggle_hide +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core import surface def build_curve(nw: NodeWrangler, positions, circular=False, handle='VECTOR'): diff --git a/infinigen/assets/utils/object.py b/infinigen/assets/utils/object.py index 961f22bf7..b49ee29d6 100644 --- a/infinigen/assets/utils/object.py +++ b/infinigen/assets/utils/object.py @@ -9,8 +9,8 @@ import trimesh from mathutils import Vector -import util.blender as butil -from assets.utils.decorate import read_co +import infinigen.core.util.blender as butil +from infinigen.assets.utils.decorate import read_co def center(obj): diff --git a/infinigen/assets/utils/physics.py b/infinigen/assets/utils/physics.py index 9cc55cf47..0af5b2c4a 100644 --- a/infinigen/assets/utils/physics.py +++ b/infinigen/assets/utils/physics.py @@ -6,8 +6,8 @@ import bpy -import util.blender as butil -from util.logging import Suppress +import infinigen.core.util.blender as butil +from infinigen.core.util.logging import Suppress def free_fall(actives, passives, place_fn, t=100): diff --git a/infinigen/assets/utils/shortest_path.py b/infinigen/assets/utils/shortest_path.py index f1d630fa5..0bd685de9 100644 --- a/infinigen/assets/utils/shortest_path.py +++ b/infinigen/assets/utils/shortest_path.py @@ -6,9 +6,9 @@ -from nodes.node_info import Nodes -from nodes.node_wrangler import NodeWrangler -from surfaces import surface +from infinigen.core.nodes.node_info import Nodes +from infinigen.core.nodes.node_wrangler import NodeWrangler +from infinigen.core import surface def geo_shortest_path(nw: NodeWrangler, end_index, weight, trim_threshold=.1, offset=0., merge_threshold=.005, diff --git a/infinigen/assets/utils/tag.py b/infinigen/assets/utils/tag.py index ea771c676..03901d8f1 100644 --- a/infinigen/assets/utils/tag.py +++ b/infinigen/assets/utils/tag.py @@ -8,8 +8,8 @@ import bpy import json import numpy as np -import util.blender as butil -from nodes.node_wrangler import Nodes, NodeWrangler +import infinigen.core.util.blender as butil +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler class AutoTag(): tag_dict = {} diff --git a/infinigen/assets/weather/__init__.py b/infinigen/assets/weather/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/infinigen/assets/weather/cloud/cloud.py b/infinigen/assets/weather/cloud/cloud.py index 135b2c747..632321a0f 100644 --- a/infinigen/assets/weather/cloud/cloud.py +++ b/infinigen/assets/weather/cloud/cloud.py @@ -11,20 +11,18 @@ from tqdm import trange, tqdm from numpy.random import uniform, normal -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core import surface -from assets.cloud.node import geometry_func, shader_material -from assets.cloud.node import scatter_func - -from lighting import lighting +from infinigen.assets.weather.cloud.node import geometry_func, shader_material +from infinigen.assets.weather.cloud.node import scatter_func from scipy.ndimage import distance_transform_edt from skimage import measure -import util -from util import blender as butil +from infinigen.core.util.logging import Suppress +from infinigen.core.util import blender as butil def set_curves(curve, points): @@ -176,7 +174,7 @@ def make_cloud(self, marching_cubes=False, resolution=128, selection=None, ): link_object(cloud) - with util.logging.Suppress(): + with Suppress(): # Set origin butil.select(cloud) bpy.ops.object.origin_set(type='ORIGIN_GEOMETRY', center='MEDIAN') @@ -499,7 +497,7 @@ def initialize(collection): dimensions = dimensions * scale cloud.dimensions = dimensions - lighting.add_lighting() + sky_lighting.add_lighting() return clouds @@ -555,7 +553,7 @@ def single(): cloud.location = [xs[i], ys[i], 0] - lighting.add_lighting() + sky_lighting.add_lighting() return clouds diff --git a/infinigen/assets/weather/cloud/generate.py b/infinigen/assets/weather/cloud/generate.py index c1fe6de74..27dfe2aea 100644 --- a/infinigen/assets/weather/cloud/generate.py +++ b/infinigen/assets/weather/cloud/generate.py @@ -8,19 +8,19 @@ import bpy import numpy as np -from assets.utils.object import new_cube -from placement.factory import AssetFactory +from infinigen.assets.utils.object import new_cube +from infinigen.core.placement.factory import AssetFactory -from assets.cloud.cloud import Cumulus, Cumulonimbus, Stratocumulus, Altocumulus -from assets.cloud.cloud import create_3d_grid +from infinigen.assets.weather.cloud.cloud import Cumulus, Cumulonimbus, Stratocumulus, Altocumulus +from infinigen.assets.weather.cloud.cloud import create_3d_grid -from surfaces import surface -from util import blender as butil -from util.math import FixedSeed -from util.random import random_general as rg +from infinigen.core import surface +from infinigen.core.util import blender as butil +from infinigen.core.util.math import FixedSeed +from infinigen.core.util.random import random_general as rg -from nodes.node_wrangler import Nodes -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.nodes.node_wrangler import Nodes +from infinigen.assets.utils.tag import tag_object, tag_nodegroup @gin.configurable diff --git a/infinigen/assets/weather/cloud/node.py b/infinigen/assets/weather/cloud/node.py index 6250b651a..0e0091ec3 100644 --- a/infinigen/assets/weather/cloud/node.py +++ b/infinigen/assets/weather/cloud/node.py @@ -4,7 +4,7 @@ # Authors: Hei Law # Acknowledgement: This file draws inspiration from https://www.youtube.com/watch?v=lPAYX8z9i8M by CGCookie -from nodes.node_wrangler import Nodes +from infinigen.core.nodes.node_wrangler import Nodes import numpy as np def cloud_geometry_func( diff --git a/infinigen/assets/weather/kole_clouds.py b/infinigen/assets/weather/kole_clouds.py index 47b831908..6650fed52 100644 --- a/infinigen/assets/weather/kole_clouds.py +++ b/infinigen/assets/weather/kole_clouds.py @@ -5,11 +5,11 @@ import gin import numpy as np from mathutils import Vector -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from surfaces import surface -from util.random import random_general as rg -from terrain.utils import drive_param +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core import surface +from infinigen.core.util.random import random_general as rg +from infinigen.terrain.utils import drive_param @gin.configurable def kole_clouds_shader( diff --git a/infinigen/assets/weather/particles.py b/infinigen/assets/weather/particles.py index 0f635a85a..9e4f89477 100644 --- a/infinigen/assets/weather/particles.py +++ b/infinigen/assets/weather/particles.py @@ -11,17 +11,17 @@ import gin -from placement.factory import AssetFactory -from surfaces import surface +from infinigen.core.placement.factory import AssetFactory +from infinigen.core import surface -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from util import blender as butil -from util.random import random_general -from assets.utils.tag import tag_object, tag_nodegroup +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.util import blender as butil +from infinigen.core.util.random import random_general +from infinigen.assets.utils.tag import tag_object, tag_nodegroup -from surfaces.templates import dirt -from infinigen_gpl.surfaces import snow +from infinigen.assets.materials import dirt +from infinigen.infinigen_gpl.surfaces import snow def shader_raindrop(nw): glass_bsdf = nw.new_node( diff --git a/infinigen/core/__init__.py b/infinigen/core/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/infinigen/core/core.py b/infinigen/core/execute_tasks.py similarity index 89% rename from infinigen/core/core.py rename to infinigen/core/execute_tasks.py index 41c5ed008..53b03542c 100644 --- a/infinigen/core/core.py +++ b/infinigen/core/execute_tasks.py @@ -18,8 +18,6 @@ os.environ["OPENCV_IO_ENABLE_OPENEXR"] = "1" # This must be done BEFORE import cv2. # See https://github.com/opencv/opencv/issues/21326#issuecomment-1008517425 -sys.path.append(os.path.split(os.path.abspath(__file__))[0]) - import bpy import mathutils from mathutils import Vector @@ -29,50 +27,49 @@ from tqdm import tqdm from frozendict import frozendict -from terrain import Terrain -from util.organization import Task, Attributes, TerrainNames - -from placement import placement, density, camera as cam_util -from placement.split_in_view import split_inview -from lighting import lighting, kole_clouds +from infinigen.terrain import Terrain -from assets.trees.generate import TreeFactory, BushFactory, random_season -from assets.boulder import BoulderFactory -from assets.glowing_rocks import GlowingRocksFactory -from assets.creatures import ( +from infinigen.assets.trees.generate import TreeFactory, BushFactory, random_season +from infinigen.assets.rocks.boulder import BoulderFactory +from infinigen.assets.lighting.glowing_rocks import GlowingRocksFactory +from infinigen.assets.creatures import ( CarnivoreFactory, HerbivoreFactory, FishFactory, FishSchoolFactory, \ BeetleFactory, AntSwarmFactory, BirdFactory, SnakeFactory, \ - CrustaceanFactory, FlyingBirdFactory, CrabFactory, LobsterFactory, SpinyLobsterFactory + CrustaceanFactory, FlyingBirdFactory, CrabFactory, LobsterFactory, SpinyLobsterFactory, + DragonflyFactory ) -from assets.insects.assembled.dragonfly import DragonflyFactory -from assets.cloud.generate import CloudFactory -from assets.cactus import CactusFactory -from assets.creatures import boid_swarm +from infinigen.assets.weather.cloud.generate import CloudFactory +from infinigen.assets.cactus import CactusFactory + +from infinigen.core.placement import placement, camera as cam_util -from placement import placement, camera as cam_util +from infinigen.core.rendering.render import render_image +from infinigen.core.rendering.resample import resample_scene +from infinigen.assets.monocot import kelp +from infinigen.core import surface -from rendering.render import render_image -from rendering.resample import resample_scene -from assets.monocot import kelp -from surfaces import surface +from infinigen.core.util.organization import Task, Attributes, TerrainNames -from fluid.fluid import set_fire_to_assets -from fluid.asset_cache import FireCachingSystem -from fluid.cached_factory_wrappers import CachedBoulderFactory, CachedBushFactory, CachedCactusFactory, CachedCreatureFactory, CachedTreeFactory +from infinigen.core.placement import placement, density, camera as cam_util +from infinigen.core.placement.split_in_view import split_inview -import surfaces.scatters -from surfaces.scatters import ground_mushroom, slime_mold, moss, ivy, lichen, snow_layer -from surfaces.scatters.utils.selection import scatter_lower, scatter_upward +from infinigen.assets.fluid.fluid import set_fire_to_assets +from infinigen.assets.fluid.asset_cache import FireCachingSystem +from infinigen.assets.fluid.cached_factory_wrappers import CachedBoulderFactory, CachedBushFactory, CachedCactusFactory, CachedCreatureFactory, CachedTreeFactory -from placement.factory import make_asset_collection -from util import blender as butil -from util import exporting -from util.logging import Timer, save_polycounts, create_text_file, Suppress -from util.math import FixedSeed, int_hash -from util.pipeline import RandomStageExecutor -from util.random import sample_registry +import infinigen.assets.scatters +from infinigen.assets.scatters import ground_mushroom, slime_mold, moss, ivy, lichen, snow_layer +from infinigen.assets.scatters.utils.selection import scatter_lower, scatter_upward -from assets.utils.tag import tag_system +from infinigen.core.placement.factory import make_asset_collection +from infinigen.core.util import blender as butil +from infinigen.core.util import exporting +from infinigen.core.util.logging import Timer, save_polycounts, create_text_file, Suppress +from infinigen.core.util.math import FixedSeed, int_hash +from infinigen.core.util.pipeline import RandomStageExecutor +from infinigen.core.util.random import sample_registry + +from infinigen.assets.utils.tag import tag_system VERSION = '1.0.4' @@ -255,9 +252,9 @@ def save_meshes(scene_seed, output_folder, frame_range, resample_idx=False): def validate_version(scene_version): if scene_version is None or scene_version.split('.')[:-1] != VERSION.split('.')[:-1]: raise ValueError( - f'generate.py {VERSION=} attempted to load a scene created by version {scene_version=}') + f'examples/generate_nature.py {VERSION=} attempted to load a scene created by version {scene_version=}') if scene_version != VERSION: - logging.warning(f'Worldgen {VERSION=} has minor version mismatch with {scene_version=}') + logging.warning(f'{VERSION=} has minor version mismatch with {scene_version=}') @gin.configurable def group_collections(config): @@ -433,9 +430,9 @@ def apply_scene_seed(args): @gin.configurable def apply_gin_configs( args, - scene_seed, + configs_folder: Path, skip_unknown=False, - mandatory_config_dir=Path('config/scene_types'), + mandatory_config_dir: Path =None, ): if mandatory_config_dir is not None: @@ -451,7 +448,7 @@ def apply_gin_configs( ) def find_config(g): - for p in Path('config').glob('**/*.gin'): + for p in configs_folder.glob('**/*.gin'): if p.parts[-1] == g: return p if p.parts[-1] == f'{g}.gin': diff --git a/infinigen/core/nodes/color.py b/infinigen/core/nodes/color.py index 0ae55314d..90979f273 100644 --- a/infinigen/core/nodes/color.py +++ b/infinigen/core/nodes/color.py @@ -13,7 +13,7 @@ import colorsys import gin -from util.math import int_hash +from infinigen.core.util.math import int_hash @dataclass class ChannelScheme: diff --git a/infinigen/core/nodes/compatibility.py b/infinigen/core/nodes/compatibility.py index 3c98feeda..8ff7a5084 100644 --- a/infinigen/core/nodes/compatibility.py +++ b/infinigen/core/nodes/compatibility.py @@ -1,7 +1,7 @@ import logging from collections import OrderedDict -from nodes.node_info import Nodes +from .node_info import Nodes logger = logging.getLogger('node_wrangler') diff --git a/infinigen/core/nodes/node_transpiler/transpiler.py b/infinigen/core/nodes/node_transpiler/transpiler.py index afe9eb385..e51fde7b5 100644 --- a/infinigen/core/nodes/node_transpiler/transpiler.py +++ b/infinigen/core/nodes/node_transpiler/transpiler.py @@ -61,10 +61,10 @@ def prefix(dependencies_used) -> str: "import bpy\n" "import mathutils\n" "from numpy.random import uniform, normal, randint\n" - "from nodes.node_wrangler import Nodes, NodeWrangler\n" - "from nodes import node_utils\n" - "from nodes.color import color_category\n" - "from surfaces import surface\n" + "from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler\n" + "from infinigen.core.nodes import node_utils\n" + "from infinigen.core.nodes.color import color_category\n" + "from infinigen.core import surface\n" ) deps_table = [(ng_name, name_used[0]) for ng_name, name_used in dependencies_used.items() if name_used[1]] diff --git a/infinigen/core/nodes/node_transpiler/transpiler_dev_script.py b/infinigen/core/nodes/node_transpiler/transpiler_dev_script.py index 22e1e10ef..2b62e83d6 100644 --- a/infinigen/core/nodes/node_transpiler/transpiler_dev_script.py +++ b/infinigen/core/nodes/node_transpiler/transpiler_dev_script.py @@ -5,14 +5,14 @@ ''' -1. Create a blender file at worldgen/dev_scene.blend +1. Create a blender file 2. Click the "Scripting" tab 3. Copy this script into a new script 4. Set the 'mode' to one of the following options: - mode='print' will print the result script to your terminal - mode='make_script' will create a new script in your blender UI, which you can open and run to apply the node code to an object of your choice - - mode='write_file' will write the script to a new file called 'worldgen/generated_surface_script.py. + - mode='write_file' will write the script to a new file called 'generated_surface_script.py. Make sure not to rename / move the script before committing it to git. 5. Select an object which has some materials and/or geometry nodes on it 6. Click the play button at the top of this script to run it! @@ -28,10 +28,8 @@ import bpy import mathutils -sys.path.append(os.getcwd()) - -from nodes.node_transpiler import transpiler -from nodes import node_wrangler, node_info +from infinigen.core.nodes.node_transpiler import transpiler +from infinigen.core.nodes import node_wrangler, node_info mode = 'make_script' target = 'object' diff --git a/infinigen/core/nodes/node_utils.py b/infinigen/core/nodes/node_utils.py index a8f31186d..563b6d114 100644 --- a/infinigen/core/nodes/node_utils.py +++ b/infinigen/core/nodes/node_utils.py @@ -12,10 +12,10 @@ import bpy -from surfaces import surface -from nodes.node_wrangler import Nodes, NodeWrangler -from util.blender import group_in_collection -from nodes.color import random_color_mapping +from infinigen.core import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.util.blender import group_in_collection +from infinigen.core.nodes.color import random_color_mapping def to_material(name, singleton): diff --git a/infinigen/core/nodes/node_wrangler.py b/infinigen/core/nodes/node_wrangler.py index 3331d75db..d2da1dec6 100644 --- a/infinigen/core/nodes/node_wrangler.py +++ b/infinigen/core/nodes/node_wrangler.py @@ -19,10 +19,10 @@ import bpy import numpy as np -from util.random import random_vector3 -from nodes.node_info import Nodes, NODE_ATTRS_AVAILABLE -from nodes import node_info -from nodes.compatibility import COMPATIBILITY_MAPPINGS +from infinigen.core.util.random import random_vector3 +from infinigen.core.nodes.node_info import Nodes, NODE_ATTRS_AVAILABLE +from infinigen.core.nodes import node_info +from infinigen.core.nodes.compatibility import COMPATIBILITY_MAPPINGS logger = logging.getLogger(__name__) diff --git a/infinigen/core/nodes/nodegroups/transfer_attributes.py b/infinigen/core/nodes/nodegroups/transfer_attributes.py index 3a34a32a5..3c8284e65 100644 --- a/infinigen/core/nodes/nodegroups/transfer_attributes.py +++ b/infinigen/core/nodes/nodegroups/transfer_attributes.py @@ -8,10 +8,10 @@ import mathutils import numpy as np from numpy.random import uniform, normal -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils, node_info -from surfaces import surface -from util import blender as butil +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils, node_info +from infinigen.core import surface +from infinigen.core.util import blender as butil def uvs_to_attribute(obj, name='uv_map'): diff --git a/infinigen/core/placement/__init__.py b/infinigen/core/placement/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/infinigen/core/placement/animation_policy.py b/infinigen/core/placement/animation_policy.py index aeb5f08d0..680588c7f 100644 --- a/infinigen/core/placement/animation_policy.py +++ b/infinigen/core/placement/animation_policy.py @@ -17,11 +17,11 @@ from mathutils import Matrix, Vector, Euler from tqdm import trange, tqdm -from assets.creatures.geometry.curve import Curve +from infinigen.assets.creatures.util.geometry.curve import Curve -from util.math import clip_gaussian, lerp -from util.random import random_general -from util import blender as butil +from infinigen.core.util.math import clip_gaussian, lerp +from infinigen.core.util.random import random_general +from infinigen.core.util import blender as butil logger = logging.getLogger(__name__) diff --git a/infinigen/core/placement/camera.py b/infinigen/core/placement/camera.py index 2d69297bb..c59bbcf3c 100644 --- a/infinigen/core/placement/camera.py +++ b/infinigen/core/placement/camera.py @@ -26,21 +26,20 @@ from mathutils import Matrix, Vector, Euler from mathutils.bvhtree import BVHTree -from assets.utils.decorate import toggle_hide -from rendering.post_render import colorize_depth +from infinigen.core.rendering.post_render import colorize_depth from tqdm import tqdm, trange -from placement import placement +from infinigen.core.placement import placement -from nodes import node_utils -from nodes.node_wrangler import NodeWrangler, Nodes +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.node_wrangler import NodeWrangler, Nodes from . import animation_policy -from util import blender as butil -from util.logging import Timer -from util.math import clip_gaussian, lerp -from util import camera -from util.random import random_general +from infinigen.core.util import blender as butil +from infinigen.core.util.logging import Timer +from infinigen.core.util.math import clip_gaussian, lerp +from infinigen.core.util import camera +from infinigen.core.util.random import random_general logger = logging.getLogger(__name__) @@ -539,38 +538,6 @@ def save_camera_parameters(camera_ids, output_folder, frame, use_dof=False): T = np.asarray(camera_obj.matrix_world, dtype=np.float64) @ np.diag((1.,-1.,-1.,1.)) np.savez(output_file, K=np.asarray(K, dtype=np.float64), T=T, HW=height_width) -@node_utils.to_nodegroup('ng_dist2camera', singleton=True, type='GeometryNodeTree') -def ng_dist2camera(nw: NodeWrangler): - traj = get_camera_trajectory() - trajectory = nw.new_node(Nodes.ObjectInfo, [traj]).outputs['Geometry'] - distance = nw.new_node(Nodes.Proximity, [trajectory], attrs={'target_element': 'POINTS'}).outputs['Distance'] - nw.new_node(Nodes.GroupOutput, input_kwargs={"Distance": distance}) - - -def get_camera_trajectory(): - current_frame = bpy.context.scene.frame_current - if 'Cameras' in bpy.data.collections: - locations = [] - for camera_pair in bpy.data.collections['Cameras'].children: - for camera in camera_pair.objects: - for f in camera.animation_data.action.fcurves: - for k in f.keyframe_points: - fr = int(k.co[0]) - bpy.context.scene.frame_set(fr) - locations.append(camera.location) - bpy.context.scene.frame_set(current_frame) - else: - locations = [[100] * 3] - mesh = bpy.data.meshes.new('temp') - mesh.from_pydata(np.vstack(locations), [], []) - mesh.update() - obj = bpy.data.objects.new('temp', mesh) - bpy.context.scene.collection.objects.link(obj) - bpy.context.view_layer.objects.active = obj - butil.modify_mesh(obj, 'WELD', merge_threshold=.1) - toggle_hide(obj) - return obj - if __name__ == "__main__": """ This interactive section generates a depth map by raycasting through each pixel. diff --git a/infinigen/core/placement/density.py b/infinigen/core/placement/density.py index c7f2cbc4d..19d97616d 100644 --- a/infinigen/core/placement/density.py +++ b/infinigen/core/placement/density.py @@ -11,9 +11,9 @@ import mathutils import numpy as np -from nodes.node_wrangler import NodeWrangler, Nodes -from nodes import node_utils as nu -from surfaces.surface import eval_argument +from infinigen.core.nodes.node_wrangler import NodeWrangler, Nodes +from infinigen.core.nodes import node_utils as nu +from infinigen.core.surface import eval_argument logger = logging.getLogger(__name__) diff --git a/infinigen/core/placement/detail.py b/infinigen/core/placement/detail.py index 02e07c45b..d00318f00 100644 --- a/infinigen/core/placement/detail.py +++ b/infinigen/core/placement/detail.py @@ -14,14 +14,14 @@ import numpy as np import gin -from util import blender as butil -from nodes.nodegroups import transfer_attributes -from util.blender import deep_clone_obj +from infinigen.core.util import blender as butil +from infinigen.core.nodes.nodegroups import transfer_attributes +from infinigen.core.util.blender import deep_clone_obj logger = logging.getLogger('detail') -IS_COARSE = False # Global VARIABLE, set by generate.py and used only for whether to emit warnings +IS_COARSE = False # Global VARIABLE, set by examples/generate_nature.py and used only for whether to emit warnings @gin.configurable def scatter_res_distance(dist): diff --git a/infinigen/core/placement/factory.py b/infinigen/core/placement/factory.py index b809da099..8f2270acf 100644 --- a/infinigen/core/placement/factory.py +++ b/infinigen/core/placement/factory.py @@ -14,8 +14,8 @@ import logging from tqdm import trange -from util import blender as butil -from util.math import FixedSeed, int_hash +from infinigen.core.util import blender as butil +from infinigen.core.util.math import FixedSeed, int_hash from . import detail logger = logging.getLogger(__name__) diff --git a/infinigen/core/placement/instance_scatter.py b/infinigen/core/placement/instance_scatter.py index 75631e806..1183be515 100644 --- a/infinigen/core/placement/instance_scatter.py +++ b/infinigen/core/placement/instance_scatter.py @@ -12,11 +12,11 @@ import numpy as np -from assets.utils.misc import CountInstance -from surfaces import surface -from nodes.node_wrangler import Nodes, NodeWrangler -from util import blender as butil -from placement.camera import nodegroup_active_cam_info +from infinigen.assets.utils.misc import CountInstance +from infinigen.core import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.util import blender as butil +from infinigen.core.placement.camera import nodegroup_active_cam_info logger = logging.getLogger(__name__) diff --git a/infinigen/core/placement/particles.py b/infinigen/core/placement/particles.py index 0bfbde237..517c2a4e0 100644 --- a/infinigen/core/placement/particles.py +++ b/infinigen/core/placement/particles.py @@ -15,9 +15,9 @@ from numpy.random import uniform as U, normal as N, uniform import bpy -import util -from util import blender as butil -from util.random import log_uniform +from infinigen.core.util.logging import Suppress +from infinigen.core.util import blender as butil +from infinigen.core.util.random import log_uniform def bake(emitter, system): @@ -31,7 +31,7 @@ def bake(emitter, system): 'active_object': emitter, 'point_cache': system.point_cache, } - with util.logging.Suppress(): + with Suppress(): bpy.context.scene.frame_end += 1 bpy.ops.ptcache.bake(override, bake=True) bpy.context.scene.frame_end -= 1 diff --git a/infinigen/core/placement/placement.py b/infinigen/core/placement/placement.py index 9a63f7b14..f97e0a9bd 100644 --- a/infinigen/core/placement/placement.py +++ b/infinigen/core/placement/placement.py @@ -19,14 +19,13 @@ from mathutils.bvhtree import BVHTree -import util -from util import blender as butil, camera as camera_util +from infinigen.core.util import blender as butil, camera as camera_util -from nodes.node_wrangler import NodeWrangler, Nodes, geometry_node_group_empty_new -from surfaces import surface +from infinigen.core.nodes.node_wrangler import NodeWrangler, Nodes, geometry_node_group_empty_new +from infinigen.core import surface from .factory import AssetFactory -from placement import detail +from infinigen.core.placement import detail logger = logging.getLogger('placement') diff --git a/infinigen/core/placement/split_in_view.py b/infinigen/core/placement/split_in_view.py index 5149e340d..e0cab09f7 100644 --- a/infinigen/core/placement/split_in_view.py +++ b/infinigen/core/placement/split_in_view.py @@ -12,10 +12,10 @@ import numpy as np from tqdm import trange -from util import blender as butil, camera as cam_util, math -from util.logging import Suppress -from placement.camera import get_sensor_coords -from surfaces import surface +from infinigen.core.util import blender as butil, camera as cam_util, math +from infinigen.core.util.logging import Suppress +from infinigen.core.placement.camera import get_sensor_coords +from infinigen.core import surface def raycast_visiblity_mask(obj, cam, start=None, end=None, verbose=True): diff --git a/infinigen/core/rendering/auto_exposure.py b/infinigen/core/rendering/auto_exposure.py index 8486ffd70..68dc77117 100644 --- a/infinigen/core/rendering/auto_exposure.py +++ b/infinigen/core/rendering/auto_exposure.py @@ -4,10 +4,10 @@ import bpy import mathutils from numpy.random import uniform, normal, randint -from nodes.node_wrangler import Nodes, NodeWrangler -from nodes import node_utils -from nodes.color import color_category -from surfaces import surface +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.nodes import node_utils +from infinigen.core.nodes.color import color_category +from infinigen.core import surface @node_utils.to_nodegroup('nodegroup_auto_exposure', singleton=False, type='CompositorNodeTree') def nodegroup_auto_exposure(nw: NodeWrangler): diff --git a/infinigen/core/rendering/render.py b/infinigen/core/rendering/render.py index ea3aa96dc..bcfdf77da 100644 --- a/infinigen/core/rendering/render.py +++ b/infinigen/core/rendering/render.py @@ -18,17 +18,17 @@ import numpy as np from imageio import imread, imwrite -from infinigen_gpl.extras.enable_gpu import enable_gpu -from nodes.node_wrangler import Nodes, NodeWrangler -from placement import camera as cam_util -from rendering.post_render import (colorize_depth, colorize_flow, +from infinigen.infinigen_gpl.extras.enable_gpu import enable_gpu +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.core.placement import camera as cam_util +from infinigen.core.rendering.post_render import (colorize_depth, colorize_flow, colorize_normals, colorize_int_array, load_depth, load_flow, load_normals, load_seg_mask, load_uniq_inst) -from surfaces import surface -from util import blender as butil -from util import exporting as exputil -from util.logging import Timer +from infinigen.core import surface +from infinigen.core.util import blender as butil +from infinigen.core.util import exporting as exputil +from infinigen.core.util.logging import Timer from .auto_exposure import nodegroup_auto_exposure diff --git a/infinigen/core/rendering/resample.py b/infinigen/core/rendering/resample.py index 03d80cc1e..a0085d84e 100644 --- a/infinigen/core/rendering/resample.py +++ b/infinigen/core/rendering/resample.py @@ -7,17 +7,17 @@ import bpy -from nodes.node_utils import resample_node_group -from nodes.node_wrangler import NodeWrangler +from infinigen.core.nodes.node_utils import resample_node_group +from infinigen.core.nodes.node_wrangler import NodeWrangler -from lighting import lighting +from infinigen.assets.lighting import sky_lighting -from assets.trees.generate import TreeFactory, BushFactory -from assets.glowing_rocks import GlowingRocksFactory +from infinigen.assets.trees.generate import TreeFactory, BushFactory +from infinigen.assets.lighting.glowing_rocks import GlowingRocksFactory -from util.logging import Timer -from util.math import FixedSeed, int_hash -from util import blender as butil +from infinigen.core.util.logging import Timer +from infinigen.core.util.math import FixedSeed, int_hash +from infinigen.core.util import blender as butil def resample_all(factory_class): for placeholder_col in butil.get_collection('placeholders').children: @@ -48,4 +48,4 @@ def resample_scene(scene_seed): resample_all(BushFactory) #resample_all(CreatureFactory) with FixedSeed(scene_seed): - lighting.add_lighting() \ No newline at end of file + sky_lighting.add_lighting() \ No newline at end of file diff --git a/infinigen/core/surfaces/surface.py b/infinigen/core/surface.py similarity index 96% rename from infinigen/core/surfaces/surface.py rename to infinigen/core/surface.py index 0999a74d3..664179a77 100644 --- a/infinigen/core/surfaces/surface.py +++ b/infinigen/core/surface.py @@ -17,10 +17,10 @@ import numpy as np from tqdm import trange -from util import blender as butil -from util.blender import set_geomod_inputs # got moved, left here for import compatibility -from nodes.node_wrangler import NodeWrangler, Nodes, isnode, infer_output_socket, geometry_node_group_empty_new -from nodes import node_info +from infinigen.core.util import blender as butil +from infinigen.core.util.blender import set_geomod_inputs # got moved, left here for import compatibility +from infinigen.core.nodes.node_wrangler import NodeWrangler, Nodes, isnode, infer_output_socket, geometry_node_group_empty_new +from infinigen.core.nodes import node_info def remove_materials(obj): with butil.SelectObjects(obj): @@ -365,7 +365,11 @@ def get_surface(name): if name == '': return NoApply - prefixes = ['infinigen_gpl.surfaces', 'surfaces.templates', 'surfaces.scatters'] + prefixes = [ + 'infinigen.infinigen_gpl.surfaces', + 'infinigen.assets.materials', + 'infinigen.assets.scatters' + ] for prefix in prefixes: try: return importlib.import_module(prefix + '.' + name) diff --git a/infinigen/core/util/__init__.py b/infinigen/core/util/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/infinigen/core/util/blender.py b/infinigen/core/util/blender.py index 7b1bb504b..8bfd30594 100644 --- a/infinigen/core/util/blender.py +++ b/infinigen/core/util/blender.py @@ -29,7 +29,7 @@ from .math import lerp # for other people to import from this file from . import math as mutil from .logging import Suppress -from nodes.node_info import DATATYPE_FIELDS, DATATYPE_DIMS +from infinigen.core.nodes.node_info import DATATYPE_FIELDS, DATATYPE_DIMS logger = logging.getLogger(__name__) diff --git a/infinigen/core/util/camera.py b/infinigen/core/util/camera.py index 4e4d4d68a..0c0dbff68 100644 --- a/infinigen/core/util/camera.py +++ b/infinigen/core/util/camera.py @@ -12,8 +12,8 @@ import bpy_extras from tqdm import trange -from util.math import homogenize, dehomogenize -from util import blender as butil +from infinigen.core.util.math import homogenize, dehomogenize +from infinigen.core.util import blender as butil #--------------------------------------------------------------- # 3x4 P matrix from Blender camera diff --git a/infinigen/core/util/exporting.py b/infinigen/core/util/exporting.py index f1a92e242..cee721207 100644 --- a/infinigen/core/util/exporting.py +++ b/infinigen/core/util/exporting.py @@ -15,7 +15,7 @@ import numpy as np from itertools import chain, product from tqdm import tqdm -from util.math import int_hash +from infinigen.core.util.math import int_hash from bpy.types import DepsgraphObjectInstance def get_mesh_data(obj): diff --git a/infinigen/core/util/logging.py b/infinigen/core/util/logging.py index 8f355458d..4b2af4d20 100644 --- a/infinigen/core/util/logging.py +++ b/infinigen/core/util/logging.py @@ -15,7 +15,6 @@ import bpy import gin -from termcolor import colored timer_results = logging.getLogger('times') diff --git a/infinigen/core/util/pipeline.py b/infinigen/core/util/pipeline.py index 6caa303ef..e97d37d28 100644 --- a/infinigen/core/util/pipeline.py +++ b/infinigen/core/util/pipeline.py @@ -14,9 +14,9 @@ from contextlib import nullcontext -from util.math import FixedSeed, int_hash -from util.logging import Timer -from util.blender import GarbageCollect, count_instance, count_objects +from infinigen.core.util.math import FixedSeed, int_hash +from infinigen.core.util.logging import Timer +from infinigen.core.util.blender import GarbageCollect, count_instance, count_objects class RandomStageExecutor: diff --git a/infinigen/core/util/random.py b/infinigen/core/util/random.py index c59ea044c..c27bdd9f9 100644 --- a/infinigen/core/util/random.py +++ b/infinigen/core/util/random.py @@ -4,10 +4,10 @@ # Authors: Zeyu Ma, Alexander Raistrick -from nodes.color import color_category +from infinigen.core.nodes.color import color_category import gin import numpy as np -from util.math import md5_hash, clip_gaussian +from infinigen.core.util.math import md5_hash, clip_gaussian import random import json import json5 @@ -60,7 +60,7 @@ def random_general(var): num_sample = 1 else: num_sample = args[1] - color_template = json5.load(open(f"config/palette/{args[0]}.json", "r")) + color_template = json5.load(open(f"examples/configs/palette/{args[0]}.json", "r")) colors = color_template["color"] means = np.array(color_template["hsv"]) stds = np.array(color_template["std"]) diff --git a/infinigen/datagen/custom_ground_truth/.gitignore b/infinigen/datagen/customgt/.gitignore similarity index 100% rename from infinigen/datagen/custom_ground_truth/.gitignore rename to infinigen/datagen/customgt/.gitignore diff --git a/infinigen/datagen/custom_ground_truth/CMakeLists.txt b/infinigen/datagen/customgt/CMakeLists.txt similarity index 79% rename from infinigen/datagen/custom_ground_truth/CMakeLists.txt rename to infinigen/datagen/customgt/CMakeLists.txt index 2e01a4f67..c14932ba0 100644 --- a/infinigen/datagen/custom_ground_truth/CMakeLists.txt +++ b/infinigen/datagen/customgt/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.10.0) -project(process_mesh VERSION 0.1.0) +project(customgt VERSION 0.1.0) if (NOT (${CMAKE_SYSTEM_NAME} MATCHES "Darwin" OR ${CMAKE_SYSTEM_NAME} MATCHES "Linux")) message(FATAL_ERROR "${CMAKE_SYSTEM_NAME} not supported") @@ -49,16 +49,16 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") link_libraries(stdc++fs) endif() -add_executable(process_mesh ${ADJACENT_SRC_FILES} dependencies/scharstein_flow_viz/colorcode.cpp dependencies/fast_obj/fast_obj.h dependencies/fast_obj/fast_obj.c dependencies/glad/src/glad.c dependencies/glad/src/glad_egl.c) +add_executable(customgt ${ADJACENT_SRC_FILES} dependencies/scharstein_flow_viz/colorcode.cpp dependencies/fast_obj/fast_obj.h dependencies/fast_obj/fast_obj.c dependencies/glad/src/glad.c dependencies/glad/src/glad_egl.c) -set_property(TARGET process_mesh PROPERTY CXX_STANDARD 17) +set_property(TARGET customgt PROPERTY CXX_STANDARD 17) set(CPACK_PROJECT_NAME ${PROJECT_NAME}) set(CPACK_PROJECT_VERSION ${PROJECT_VERSION}) include(CPack) if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - target_link_libraries(process_mesh dl m stdc++ cnpy glfw) + target_link_libraries(customgt dl m stdc++ cnpy glfw) elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux") - target_link_libraries(process_mesh GL GLU dl EGL m stdc++ X11 cnpy) + target_link_libraries(customgt GL GLU dl EGL m stdc++ X11 cnpy) endif() diff --git a/infinigen/datagen/custom_ground_truth/blender_object.cpp b/infinigen/datagen/customgt/blender_object.cpp similarity index 100% rename from infinigen/datagen/custom_ground_truth/blender_object.cpp rename to infinigen/datagen/customgt/blender_object.cpp diff --git a/infinigen/datagen/custom_ground_truth/blender_object.hpp b/infinigen/datagen/customgt/blender_object.hpp similarity index 100% rename from infinigen/datagen/custom_ground_truth/blender_object.hpp rename to infinigen/datagen/customgt/blender_object.hpp diff --git a/infinigen/datagen/custom_ground_truth/buffer_arrays.cpp b/infinigen/datagen/customgt/buffer_arrays.cpp similarity index 100% rename from infinigen/datagen/custom_ground_truth/buffer_arrays.cpp rename to infinigen/datagen/customgt/buffer_arrays.cpp diff --git a/infinigen/datagen/custom_ground_truth/buffer_arrays.hpp b/infinigen/datagen/customgt/buffer_arrays.hpp similarity index 100% rename from infinigen/datagen/custom_ground_truth/buffer_arrays.hpp rename to infinigen/datagen/customgt/buffer_arrays.hpp diff --git a/infinigen/datagen/custom_ground_truth/camera_view.cpp b/infinigen/datagen/customgt/camera_view.cpp similarity index 100% rename from infinigen/datagen/custom_ground_truth/camera_view.cpp rename to infinigen/datagen/customgt/camera_view.cpp diff --git a/infinigen/datagen/custom_ground_truth/camera_view.hpp b/infinigen/datagen/customgt/camera_view.hpp similarity index 100% rename from infinigen/datagen/custom_ground_truth/camera_view.hpp rename to infinigen/datagen/customgt/camera_view.hpp diff --git a/infinigen/datagen/custom_ground_truth/compress_masks.py b/infinigen/datagen/customgt/compress_masks.py similarity index 100% rename from infinigen/datagen/custom_ground_truth/compress_masks.py rename to infinigen/datagen/customgt/compress_masks.py diff --git a/infinigen/datagen/custom_ground_truth/dependencies/argparse b/infinigen/datagen/customgt/dependencies/argparse similarity index 100% rename from infinigen/datagen/custom_ground_truth/dependencies/argparse rename to infinigen/datagen/customgt/dependencies/argparse diff --git a/infinigen/datagen/custom_ground_truth/dependencies/cnpy b/infinigen/datagen/customgt/dependencies/cnpy similarity index 100% rename from infinigen/datagen/custom_ground_truth/dependencies/cnpy rename to infinigen/datagen/customgt/dependencies/cnpy diff --git a/infinigen/datagen/custom_ground_truth/dependencies/eigen b/infinigen/datagen/customgt/dependencies/eigen similarity index 100% rename from infinigen/datagen/custom_ground_truth/dependencies/eigen rename to infinigen/datagen/customgt/dependencies/eigen diff --git a/infinigen/datagen/custom_ground_truth/dependencies/fast_obj b/infinigen/datagen/customgt/dependencies/fast_obj similarity index 100% rename from infinigen/datagen/custom_ground_truth/dependencies/fast_obj rename to infinigen/datagen/customgt/dependencies/fast_obj diff --git a/infinigen/datagen/custom_ground_truth/dependencies/glad/include/EGL/eglplatform.h b/infinigen/datagen/customgt/dependencies/glad/include/EGL/eglplatform.h similarity index 100% rename from infinigen/datagen/custom_ground_truth/dependencies/glad/include/EGL/eglplatform.h rename to infinigen/datagen/customgt/dependencies/glad/include/EGL/eglplatform.h diff --git a/infinigen/datagen/custom_ground_truth/dependencies/glad/include/KHR/khrplatform.h b/infinigen/datagen/customgt/dependencies/glad/include/KHR/khrplatform.h similarity index 100% rename from infinigen/datagen/custom_ground_truth/dependencies/glad/include/KHR/khrplatform.h rename to infinigen/datagen/customgt/dependencies/glad/include/KHR/khrplatform.h diff --git a/infinigen/datagen/custom_ground_truth/dependencies/glad/include/glad/glad.h b/infinigen/datagen/customgt/dependencies/glad/include/glad/glad.h similarity index 100% rename from infinigen/datagen/custom_ground_truth/dependencies/glad/include/glad/glad.h rename to infinigen/datagen/customgt/dependencies/glad/include/glad/glad.h diff --git a/infinigen/datagen/custom_ground_truth/dependencies/glad/include/glad/glad_egl.h b/infinigen/datagen/customgt/dependencies/glad/include/glad/glad_egl.h similarity index 100% rename from infinigen/datagen/custom_ground_truth/dependencies/glad/include/glad/glad_egl.h rename to infinigen/datagen/customgt/dependencies/glad/include/glad/glad_egl.h diff --git a/infinigen/datagen/custom_ground_truth/dependencies/glad/src/glad.c b/infinigen/datagen/customgt/dependencies/glad/src/glad.c similarity index 100% rename from infinigen/datagen/custom_ground_truth/dependencies/glad/src/glad.c rename to infinigen/datagen/customgt/dependencies/glad/src/glad.c diff --git a/infinigen/datagen/custom_ground_truth/dependencies/glad/src/glad_egl.c b/infinigen/datagen/customgt/dependencies/glad/src/glad_egl.c similarity index 100% rename from infinigen/datagen/custom_ground_truth/dependencies/glad/src/glad_egl.c rename to infinigen/datagen/customgt/dependencies/glad/src/glad_egl.c diff --git a/infinigen/datagen/custom_ground_truth/dependencies/glfw b/infinigen/datagen/customgt/dependencies/glfw similarity index 100% rename from infinigen/datagen/custom_ground_truth/dependencies/glfw rename to infinigen/datagen/customgt/dependencies/glfw diff --git a/infinigen/datagen/custom_ground_truth/dependencies/glm b/infinigen/datagen/customgt/dependencies/glm similarity index 100% rename from infinigen/datagen/custom_ground_truth/dependencies/glm rename to infinigen/datagen/customgt/dependencies/glm diff --git a/infinigen/datagen/custom_ground_truth/dependencies/indicators b/infinigen/datagen/customgt/dependencies/indicators similarity index 100% rename from infinigen/datagen/custom_ground_truth/dependencies/indicators rename to infinigen/datagen/customgt/dependencies/indicators diff --git a/infinigen/datagen/custom_ground_truth/dependencies/json b/infinigen/datagen/customgt/dependencies/json similarity index 100% rename from infinigen/datagen/custom_ground_truth/dependencies/json rename to infinigen/datagen/customgt/dependencies/json diff --git a/infinigen/datagen/custom_ground_truth/dependencies/scharstein_flow_viz/README.txt b/infinigen/datagen/customgt/dependencies/scharstein_flow_viz/README.txt similarity index 100% rename from infinigen/datagen/custom_ground_truth/dependencies/scharstein_flow_viz/README.txt rename to infinigen/datagen/customgt/dependencies/scharstein_flow_viz/README.txt diff --git a/infinigen/datagen/custom_ground_truth/dependencies/scharstein_flow_viz/colorcode.cpp b/infinigen/datagen/customgt/dependencies/scharstein_flow_viz/colorcode.cpp similarity index 100% rename from infinigen/datagen/custom_ground_truth/dependencies/scharstein_flow_viz/colorcode.cpp rename to infinigen/datagen/customgt/dependencies/scharstein_flow_viz/colorcode.cpp diff --git a/infinigen/datagen/custom_ground_truth/dependencies/scharstein_flow_viz/colorcode.h b/infinigen/datagen/customgt/dependencies/scharstein_flow_viz/colorcode.h similarity index 100% rename from infinigen/datagen/custom_ground_truth/dependencies/scharstein_flow_viz/colorcode.h rename to infinigen/datagen/customgt/dependencies/scharstein_flow_viz/colorcode.h diff --git a/infinigen/datagen/custom_ground_truth/dependencies/stb b/infinigen/datagen/customgt/dependencies/stb similarity index 100% rename from infinigen/datagen/custom_ground_truth/dependencies/stb rename to infinigen/datagen/customgt/dependencies/stb diff --git a/infinigen/datagen/custom_ground_truth/dependencies/tinycolormap b/infinigen/datagen/customgt/dependencies/tinycolormap similarity index 100% rename from infinigen/datagen/custom_ground_truth/dependencies/tinycolormap rename to infinigen/datagen/customgt/dependencies/tinycolormap diff --git a/infinigen/datagen/custom_ground_truth/glsl/hair.frag b/infinigen/datagen/customgt/glsl/hair.frag similarity index 100% rename from infinigen/datagen/custom_ground_truth/glsl/hair.frag rename to infinigen/datagen/customgt/glsl/hair.frag diff --git a/infinigen/datagen/custom_ground_truth/glsl/hair.geom b/infinigen/datagen/customgt/glsl/hair.geom similarity index 100% rename from infinigen/datagen/custom_ground_truth/glsl/hair.geom rename to infinigen/datagen/customgt/glsl/hair.geom diff --git a/infinigen/datagen/custom_ground_truth/glsl/hair.vert b/infinigen/datagen/customgt/glsl/hair.vert similarity index 100% rename from infinigen/datagen/custom_ground_truth/glsl/hair.vert rename to infinigen/datagen/customgt/glsl/hair.vert diff --git a/infinigen/datagen/custom_ground_truth/glsl/next_wings.vert b/infinigen/datagen/customgt/glsl/next_wings.vert similarity index 100% rename from infinigen/datagen/custom_ground_truth/glsl/next_wings.vert rename to infinigen/datagen/customgt/glsl/next_wings.vert diff --git a/infinigen/datagen/custom_ground_truth/glsl/spine.frag b/infinigen/datagen/customgt/glsl/spine.frag similarity index 100% rename from infinigen/datagen/custom_ground_truth/glsl/spine.frag rename to infinigen/datagen/customgt/glsl/spine.frag diff --git a/infinigen/datagen/custom_ground_truth/glsl/spine.geom b/infinigen/datagen/customgt/glsl/spine.geom similarity index 100% rename from infinigen/datagen/custom_ground_truth/glsl/spine.geom rename to infinigen/datagen/customgt/glsl/spine.geom diff --git a/infinigen/datagen/custom_ground_truth/glsl/wings.frag b/infinigen/datagen/customgt/glsl/wings.frag similarity index 100% rename from infinigen/datagen/custom_ground_truth/glsl/wings.frag rename to infinigen/datagen/customgt/glsl/wings.frag diff --git a/infinigen/datagen/custom_ground_truth/glsl/wings.geom b/infinigen/datagen/customgt/glsl/wings.geom similarity index 100% rename from infinigen/datagen/custom_ground_truth/glsl/wings.geom rename to infinigen/datagen/customgt/glsl/wings.geom diff --git a/infinigen/datagen/custom_ground_truth/glsl/wings.vert b/infinigen/datagen/customgt/glsl/wings.vert similarity index 100% rename from infinigen/datagen/custom_ground_truth/glsl/wings.vert rename to infinigen/datagen/customgt/glsl/wings.vert diff --git a/infinigen/datagen/custom_ground_truth/io.cpp b/infinigen/datagen/customgt/io.cpp similarity index 100% rename from infinigen/datagen/custom_ground_truth/io.cpp rename to infinigen/datagen/customgt/io.cpp diff --git a/infinigen/datagen/custom_ground_truth/io.hpp b/infinigen/datagen/customgt/io.hpp similarity index 100% rename from infinigen/datagen/custom_ground_truth/io.hpp rename to infinigen/datagen/customgt/io.hpp diff --git a/infinigen/datagen/custom_ground_truth/load_blender_mesh.cpp b/infinigen/datagen/customgt/load_blender_mesh.cpp similarity index 100% rename from infinigen/datagen/custom_ground_truth/load_blender_mesh.cpp rename to infinigen/datagen/customgt/load_blender_mesh.cpp diff --git a/infinigen/datagen/custom_ground_truth/load_blender_mesh.hpp b/infinigen/datagen/customgt/load_blender_mesh.hpp similarity index 100% rename from infinigen/datagen/custom_ground_truth/load_blender_mesh.hpp rename to infinigen/datagen/customgt/load_blender_mesh.hpp diff --git a/infinigen/datagen/custom_ground_truth/main.cpp b/infinigen/datagen/customgt/main.cpp similarity index 99% rename from infinigen/datagen/custom_ground_truth/main.cpp rename to infinigen/datagen/customgt/main.cpp index 332f0c3bb..7b59264b7 100644 --- a/infinigen/datagen/custom_ground_truth/main.cpp +++ b/infinigen/datagen/customgt/main.cpp @@ -92,7 +92,7 @@ int main(int argc, char *argv[]) { const std::regex regex{"VERSION \\\"([0-9\\.]+)\\\""}; std::smatch m; if ((std::regex_search(file_text, m, regex)) && (VERSION != m[1])){ - std::cerr << "Error: The process_mesh executable is out-of-date, you need to re-compile it." << std::endl; + std::cerr << "Error: The customgt executable is out-of-date, you need to re-compile it." << std::endl; exit(1); } diff --git a/infinigen/datagen/custom_ground_truth/shader.cpp b/infinigen/datagen/customgt/shader.cpp similarity index 100% rename from infinigen/datagen/custom_ground_truth/shader.cpp rename to infinigen/datagen/customgt/shader.cpp diff --git a/infinigen/datagen/custom_ground_truth/shader.hpp b/infinigen/datagen/customgt/shader.hpp similarity index 100% rename from infinigen/datagen/custom_ground_truth/shader.hpp rename to infinigen/datagen/customgt/shader.hpp diff --git a/infinigen/datagen/custom_ground_truth/show.py b/infinigen/datagen/customgt/show.py similarity index 100% rename from infinigen/datagen/custom_ground_truth/show.py rename to infinigen/datagen/customgt/show.py diff --git a/infinigen/datagen/custom_ground_truth/string_tools.cpp b/infinigen/datagen/customgt/string_tools.cpp similarity index 100% rename from infinigen/datagen/custom_ground_truth/string_tools.cpp rename to infinigen/datagen/customgt/string_tools.cpp diff --git a/infinigen/datagen/custom_ground_truth/string_tools.hpp b/infinigen/datagen/customgt/string_tools.hpp similarity index 100% rename from infinigen/datagen/custom_ground_truth/string_tools.hpp rename to infinigen/datagen/customgt/string_tools.hpp diff --git a/infinigen/datagen/custom_ground_truth/utils.cpp b/infinigen/datagen/customgt/utils.cpp similarity index 100% rename from infinigen/datagen/custom_ground_truth/utils.cpp rename to infinigen/datagen/customgt/utils.cpp diff --git a/infinigen/datagen/custom_ground_truth/utils.hpp b/infinigen/datagen/customgt/utils.hpp similarity index 100% rename from infinigen/datagen/custom_ground_truth/utils.hpp rename to infinigen/datagen/customgt/utils.hpp diff --git a/infinigen/datagen/job_funcs.py b/infinigen/datagen/job_funcs.py index a8a618b41..438ac8ced 100644 --- a/infinigen/datagen/job_funcs.py +++ b/infinigen/datagen/job_funcs.py @@ -337,7 +337,7 @@ def queue_opengl( tmp_script = Path(folder) / "tmp" / f"opengl_{uuid4().hex}.sh" tmp_script.parent.mkdir(exist_ok=True) - process_mesh_path = Path("../process_mesh/build/process_mesh").resolve() + process_mesh_path = Path("infinigen/datagen/customgt/build/customgt").resolve() input_folder = Path(folder)/f'savemesh{output_suffix}' # OUTPUT SUFFIX IS CORRECT HERE. I know its weird. But input suffix really means 'prev tier of the pipeline if (gt_testing): copy_folder = Path(folder) / f"frames{output_suffix}" diff --git a/infinigen/datagen/manage_jobs copy.py b/infinigen/datagen/manage_jobs copy.py deleted file mode 100644 index cafb59e2d..000000000 --- a/infinigen/datagen/manage_jobs copy.py +++ /dev/null @@ -1,1278 +0,0 @@ -# Copyright (c) Princeton University. -# This source code is licensed under the BSD 3-Clause license found in the LICENSE file in the root directory of this source tree. - -# Authors: -# - Alex Raistrick: refactor, local rendering, video rendering -# - Lahav Lipson: stereo version, local rendering -# - Hei Law: initial version - - -import argparse -import logging -import os -import re -import random -import gin -import subprocess -import time -import sys -import time -import math -import itertools -from uuid import uuid4 -from enum import Enum -from copy import copy -from ast import literal_eval - -from functools import partial, cache -from collections import defaultdict -from datetime import datetime -from pathlib import Path -from shutil import which, rmtree, copyfile, copytree - -import pandas as pd -from tqdm import tqdm - -import numpy as np -import submitit -import wandb -from jinja2 import Environment, FileSystemLoader, select_autoescape - -from tools.util.show_gpu_table import nodes_with_gpus -from tools.util.cleanup import cleanup -from tools.util.submitit_emulator import ScheduledLocalExecutor, ImmediateLocalExecutor, LocalScheduleHandler, LocalJob - -from tools.util import upload_util -from tools.util.upload_util import upload_job_folder # for pickle not to freak out - -PARTITION_ENVVAR = 'INFINIGEN_SLURMPARTITION' # used only if enabled in config -EXCLUDE_FILE_ENVVAR = 'INFINIGEN_SLURM_EXCLUDENODES_LIST' - -class JobState: - NotQueued = "notqueued" - Queued = "queued" - Running = "running" - Succeeded = "succeeded" - Failed = "crashed" - -class SceneState: - NotDone = "notdone" - Done = "done" - Crashed = "crashed" - -JOB_OBJ_SUCCEEDED = 'MARK_AS_SUCCEEDED' -CONCLUDED_STATES = {JobState.Succeeded, JobState.Failed} - -# Will throw exception if the scene was not found. Sometimes this happens if the scene was queued very very recently -# Keys: JobID ArrayJobID User Group State Clustername Ncpus Nnodes Ntasks Reqmem PerNode Cput Walltime Mem ExitStatus -@gin.configurable -def seff(job_obj, retry_on_error=True): - scene_id = job_obj.job_id - assert scene_id.isdigit() - while True: - try: - seff_out = subprocess.check_output(f"/usr/bin/seff -d {scene_id}".split()).decode() - lines = seff_out.splitlines() - return dict(zip(lines[0].split(' ')[2:], lines[1].split(' ')[2:]))["State"] - except: - if not retry_on_error: - raise - time.sleep(1) - -def node_from_slurm_jobid(scene_id): - - if not which('sacct'): - return None - - try: - node_of_scene, *rest = subprocess.check_output(f"{which('sacct')} -j {scene_id} --format Node --noheader".split()).decode().split() - return node_of_scene - except Exception as e: - logging.warning(f'sacct threw {e}') - return None - -def get_scene_state(scene_dict, taskname, scene_folder): - - if not scene_dict.get(f'{taskname}_submitted', False): - return JobState.NotQueued - if scene_dict.get(f'{taskname}_crash_recorded', False): - return JobState.Failed - - job_obj = scene_dict[f'{taskname}_job_obj'] - - # for when both local and slurm scenes are being mixed - if isinstance(job_obj, str): - assert job_obj == JOB_OBJ_SUCCEEDED - return JobState.Succeeded - elif isinstance(job_obj, LocalJob): - res = job_obj.status() - else: - res = seff(job_obj) - - # map from submitit's scene state strings to our JobState enum - if res in {"PENDING", "REQUEUED"}: - return JobState.Queued - elif res == 'RUNNING': - return JobState.Running - elif not (scene_folder/"logs"/f"FINISH_{taskname}").exists(): - return JobState.Failed - - return JobState.Succeeded - -def seed_generator(): - seed_int = np.random.randint(np.iinfo(np.int32).max) - return hex(seed_int).removeprefix('0x') - -@gin.configurable -def get_cmd( - seed, - task, - configs, - taskname, - output_folder, - driver_script='generate.py', - input_folder=None, - process_niceness=None, -): - - if isinstance(task, list): - task = " ".join(task) - - cmd = '' - if process_niceness is not None: - cmd += f'nice -n {process_niceness} ' - cmd += f'python {driver_script} -- ' - if input_folder is not None: - cmd += '--input_folder ' + str(input_folder) + ' ' - if output_folder is not None: - cmd += '--output_folder ' + str(output_folder) + ' ' - cmd += f'--seed {seed} --task {task} --task_uniqname {taskname} ' - if len(configs) != 0: - cmd += f'-g {" ".join(configs)} ' - cmd += '-p' - - return cmd.split() - -@gin.configurable -def get_slurm_banned_nodes(config_path=None): - if config_path == f'ENVVAR_{EXCLUDE_FILE_ENVVAR}': - config_path = os.environ.get(EXCLUDE_FILE_ENVVAR) - if config_path is None: - return [] - with Path(config_path).open('r') as f: - return list(f.read().split()) - -def get_suffix(indices): - - suffix = '' - - if indices is None: - return suffix - - indices = copy(indices) - - for key in ['cam_rig', 'resample', 'frame', 'subcam']: - val = indices.get(key, 0) - suffix += '_' + (f'{val}' if key != 'frame' else f'{val:04d}') - - return suffix - -@gin.configurable -def slurm_submit_cmd( - cmd, - folder, - name, - mem_gb=None, - cpus=None, - gpus=0, - hours=1, - slurm_account=None, - slurm_exclude: list = None, - slurm_niceness=None, - **_ -): - - executor = submitit.AutoExecutor(folder=(folder / "logs")) - executor.update_parameters( - mem_gb=mem_gb, - name=name, - cpus_per_task=cpus, - timeout_min=60*hours, - ) - - if slurm_exclude is not None: - executor.update_parameters(slurm_exclude=','.join(slurm_exclude)) - - if gpus > 0: - executor.update_parameters(gpus_per_node=gpus) - if slurm_account is not None: - - if slurm_account == f'ENVVAR_{PARTITION_ENVVAR}': - slurm_account = os.environ.get(PARTITION_ENVVAR) - if slurm_account is None: - logging.warning(f'{PARTITION_ENVVAR=} was not set, using no slurm account') - - executor.update_parameters(slurm_account=slurm_account) - - slurm_additional_params = {} - - if slurm_niceness is not None: - slurm_additional_params['nice'] = slurm_niceness - - executor.update_parameters(slurm_additional_parameters=slurm_additional_params) - - while True: - try: - if callable(cmd[0]): - func, *arg = cmd - return executor.submit(func, *arg) - render_fn = submitit.helpers.CommandFunction(cmd) - return executor.submit(render_fn) - except submitit.core.utils.FailedJobError as e: - current_time_str = datetime.now().strftime("%m/%d %I:%M%p") - print(f"[{current_time_str}] Job submission failed with error:\n{e}") - time.sleep(60) - -@gin.configurable -def local_submit_cmd(cmd, folder, name, use_scheduler=False, **kwargs): - - ExecutorClass = ScheduledLocalExecutor if use_scheduler else ImmediateLocalExecutor - executor = ExecutorClass(folder=(folder / "logs")) - executor.update_parameters(name=name, **kwargs) - if callable(cmd[0]): - func, *arg = cmd - return executor.submit(func, *arg) - else: - func = submitit.helpers.CommandFunction(cmd) - return executor.submit(func) - -@gin.configurable -def queue_upload(folder, submit_cmd, name, taskname, dir_prefix_len=0, method='rclone', seed=None, **kwargs): - func = partial(upload_job_folder, dir_prefix_len=dir_prefix_len, method=method) - res = submit_cmd((func, folder, taskname), folder, name, **kwargs) - return res, None - -@gin.configurable -def queue_coarse( - folder, - submit_cmd, - name, - seed, - configs, - taskname=None, - exclude_gpus=[], - overrides=[], - input_indices=None, output_indices=None, - **kwargs -): - """ - Generating the coarse scene - """ - - input_suffix = get_suffix(input_indices) - output_suffix = get_suffix(output_indices) - - output_folder = Path(f'{folder}/coarse{output_suffix}') - - cmd = get_cmd(seed, 'coarse', configs, taskname, output_folder=output_folder) + f''' - LOG_DIR='{folder / "logs"}' - '''.split("\n") + overrides - - with (folder / "run_pipeline.sh").open('w') as f: - f.write(f"{' '.join(' '.join(cmd).split())}\n\n") - (folder / "run_pipeline.sh").chmod(0o774) - - res = submit_cmd(cmd, - folder=folder, - name=name, - gpus=0, - slurm_exclude=nodes_with_gpus(*exclude_gpus) + get_slurm_banned_nodes(), - **kwargs - ) - return res, output_folder - -@gin.configurable -def queue_populate( - submit_cmd, - folder, - name, - seed, - configs, - taskname=None, - overrides=[], - input_indices=None, output_indices=None, - **kwargs, -): - """ - Generating the fine scene - """ - - input_suffix = get_suffix(input_indices) - output_suffix = get_suffix(output_indices) - - input_folder = folder/f'coarse{input_suffix}' - output_folder = input_folder - - cmd = get_cmd(seed, 'populate', configs, taskname, - input_folder=input_folder, - output_folder=output_folder) + f''' - LOG_DIR='{folder / "logs"}' - '''.split("\n") + overrides - - with (folder / "run_pipeline.sh").open('a') as f: - f.write(f"{' '.join(' '.join(cmd).split())}\n\n") - - res = submit_cmd(cmd, - folder=folder, - name=name, - gpus=0, - slurm_exclude=get_slurm_banned_nodes(), - **kwargs - ) - return res, output_folder - -@gin.configurable -def queue_fine_terrain( - submit_cmd, - folder, - name, - seed, - configs, - gpus=0, - taskname=None, - exclude_gpus=[], - overrides=[], - input_indices=None, output_indices=None, - **kwargs -): - """ - Generating the fine scene - """ - - input_suffix = get_suffix(input_indices) - output_suffix = get_suffix(output_indices) - - output_folder = Path(f'{folder}/fine{output_suffix}') - - enable_gpu_in_terrain = "Terrain.device='cuda'" if gpus > 0 else "" - cmd = get_cmd(seed, 'fine_terrain', configs, taskname, - input_folder=f'{folder}/coarse{input_suffix}', - output_folder=output_folder) + f''' - LOG_DIR='{folder / "logs"}' - {enable_gpu_in_terrain} - '''.split("\n") + overrides - - with (folder / "run_pipeline.sh").open('a') as f: - f.write(f"{' '.join(' '.join(cmd).split())}\n\n") - - res = submit_cmd(cmd, - folder=folder, - name=name, - gpus=gpus, - slurm_exclude=nodes_with_gpus(*exclude_gpus) + get_slurm_banned_nodes(), - **kwargs - ) - return res, output_folder - -@gin.configurable -def queue_combined( - submit_cmd, - folder, - name, - seed, - configs, - taskname=None, - exclude_gpus=[], - gpus=0, - overrides=[], - include_coarse=True, - input_indices=None, output_indices=None, - **kwargs -): - - input_suffix = get_suffix(input_indices) - output_suffix = get_suffix(output_indices) - - tasks = 'populate fine_terrain' - - if include_coarse: - tasks = 'coarse ' + tasks - - output_folder = Path(f'{folder}/fine{output_suffix}') - - enable_gpu_in_terrain = "Terrain.device='cuda'" if gpus > 0 else "" - cmd = get_cmd(seed, tasks, configs, taskname, - input_folder=f'{folder}/coarse{input_suffix}' if not include_coarse else None, - output_folder=output_folder) + f''' - LOG_DIR='{folder / "logs"}' - {enable_gpu_in_terrain} - '''.split("\n") + overrides - - with (folder / "run_pipeline.sh").open('a') as f: - f.write(f"{' '.join(' '.join(cmd).split())}\n\n") - - res = submit_cmd(cmd, - folder=folder, - name=name, - gpus=gpus, - slurm_exclude=nodes_with_gpus(*exclude_gpus) + get_slurm_banned_nodes(), - **kwargs - ) - return res, output_folder - -@gin.configurable -def queue_render( - submit_cmd, - folder, - name, - seed, - render_type, - configs, - taskname=None, - overrides=[], - exclude_gpus=[], - input_indices=None, output_indices=None, - **submit_kwargs -): - - input_suffix = get_suffix(input_indices) - output_suffix = get_suffix(output_indices) - - output_folder = Path(f'{folder}/frames{output_suffix}') - - cmd = get_cmd(seed, "render", configs, taskname, - input_folder=f'{folder}/fine{input_suffix}', - output_folder=f'{output_folder}') + f''' - render.render_image_func=@{render_type}/render_image - LOG_DIR='{folder / "logs"}' - '''.split("\n") + overrides - - with (folder / "run_pipeline.sh").open('a') as f: - f.write(f"{' '.join(' '.join(cmd).split())}\n\n") - - res = submit_cmd(cmd, - folder=folder, - name=name, - slurm_exclude=nodes_with_gpus(*exclude_gpus) + get_slurm_banned_nodes(), - **submit_kwargs, - ) - return res, output_folder - -@gin.configurable -def queue_mesh_save( - submit_cmd, - folder, - name, - seed, - configs, - taskname=None, - overrides=[], - exclude_gpus=[], - input_indices=None, output_indices=None, - reuse_subcams=True, - **submit_kwargs -): - - if (output_indices['subcam'] > 0) and reuse_subcams: - return JOB_OBJ_SUCCEEDED, None - - input_suffix = get_suffix(input_indices) - output_suffix = get_suffix(output_indices) - - output_folder = Path(f'{folder}/savemesh{output_suffix}') - - output_folder.mkdir(parents=True, exist_ok=True) - - cmd = get_cmd(seed, "mesh_save", configs, taskname, - input_folder=f'{folder}/fine{input_suffix}', - output_folder=f'{folder}/savemesh{output_suffix}') + f''' - LOG_DIR='{folder / "logs"}' - '''.split("\n") + overrides - - with (folder / "run_pipeline.sh").open('a') as f: - f.write(f"{' '.join(' '.join(cmd).split())}\n\n") - - res = submit_cmd(cmd, - folder=folder, - name=name, - slurm_exclude=nodes_with_gpus(*exclude_gpus) + get_slurm_banned_nodes(), - **submit_kwargs, - ) - return res, output_folder - -@gin.configurable -def queue_opengl( - submit_cmd, - folder, - name, - seed, - configs, - taskname=None, - overrides=[], - exclude_gpus=[], - input_indices=None, output_indices=None, - reuse_subcams=True, - gt_testing=False, - **submit_kwargs -): - - if (output_indices['subcam'] > 0) and reuse_subcams: - return JOB_OBJ_SUCCEEDED, None - - output_suffix = get_suffix(output_indices) - - tmp_script = Path(folder) / "tmp" / f"opengl_{uuid4().hex}.sh" - tmp_script.parent.mkdir(exist_ok=True) - - process_mesh_path = Path("../process_mesh/build/process_mesh").resolve() - input_folder = Path(folder)/f'savemesh{output_suffix}' # OUTPUT SUFFIX IS CORRECT HERE. I know its weird. But input suffix really means 'prev tier of the pipeline - if (gt_testing): - copy_folder = Path(folder) / f"frames{output_suffix}" - output_folder = Path(folder) / f"opengl_frames{output_suffix}" - copytree(copy_folder, output_folder, dirs_exist_ok=True) - else: - output_folder = Path(folder) / f"frames{output_suffix}" - output_folder.mkdir(exist_ok=True) - - assert input_folder.exists(), input_folder - assert isinstance(overrides, list) and ("\n" not in ' '.join(overrides)) - - start_frame, end_frame = output_indices['frame'], output_indices['last_cam_frame'] - with tmp_script.open('w') as f: - f.write("set -e\n") # Necessary to detect if the script fails - for frame_idx in range(start_frame, end_frame + 1): - line = ( - f"{process_mesh_path} --width 1920 --height 1080 -in {input_folder} " - f"--frame {frame_idx} -out {output_folder}\n" - ) - line = re.sub("( \([A-Za-z0-9]+\))", "", line) - f.write(line) - f.write(f"touch {folder}/logs/FINISH_{taskname}") - - cmd = f"bash {tmp_script}".split() - - with (folder / "run_pipeline.sh").open('a') as f: - f.write(f"{' '.join(' '.join(cmd).split())}\n\n") - - res = submit_cmd( - cmd, - folder=folder, - name=name, - slurm_exclude=nodes_with_gpus(*exclude_gpus) + get_slurm_banned_nodes(), - **submit_kwargs, - ) - return res, output_folder - -def init_db_from_existing(output_folder: Path): - - # TODO in future: directly use existing_db (with some cleanup / checking). - - db_path = output_folder/'scenes_db.csv' - if not db_path.exists(): - raise ValueError(f'Recieved --use_existing but {db_path=} did not exist') - existing_db = pd.read_csv(db_path, converters={"configs": literal_eval}) - - def init_scene(seed_folder): - if not seed_folder.is_dir(): - return None - if not (seed_folder/'logs').exists(): - logging.warning(f'Skipping {seed_folder=} due to missing "logs" subdirectory') - return None - - configs = existing_db.loc[existing_db["seed"] == seed_folder.name, "configs"].iloc[0] - - scene_dict = { - 'seed': seed_folder.name, - 'all_done': SceneState.NotDone, - 'configs': list(configs) - } - - finish_key = 'FINISH_' - for finish_file_name in (seed_folder/'logs').glob(finish_key + '*'): - taskname = os.path.basename(finish_file_name)[len(finish_key):] - logging.info(f'Marking {seed_folder.name=} {taskname=} as completed') - scene_dict[f'{taskname}_submitted'] = True - scene_dict[f'{taskname}_job_obj'] = JOB_OBJ_SUCCEEDED - - return scene_dict - - return [init_scene(seed_folder) for seed_folder in output_folder.iterdir()] - -@gin.configurable -def sample_scene_spec(i, seed_range=None, config_distribution=None, config_sample_mode='random'): - - if seed_range is None: - seed = seed_generator() - else: - start, end = seed_range - if i > end - start: - return None - seed = hex(start + i).removeprefix('0x') - - if config_distribution is None: - configs = [] - elif config_sample_mode == 'random': - configs_options, weights = zip(*config_distribution) # list of rows to list per column - ps = np.array(weights) / sum(weights) - configs = np.random.choice(configs_options, p=ps) - elif config_sample_mode == 'roundrobin': - configs_options, weights = zip(*config_distribution) # list of rows to list per column - if not all(isinstance(w, int) for w in weights): - raise ValueError(f'{config_sample_mode=} expects integer scene counts as weights but got {weights=} with non-integer values') - idx = np.argmin(i % sum(weights) + 1 > np.cumsum(weights)) - configs = configs_options[idx] - else: - raise ValueError(f'Unrecognized {config_sample_mode=}') - - if isinstance(configs, str) and " " in configs: - configs = configs.split(" ") - if not isinstance(configs, list): - configs = [configs] - - return { - "all_done": SceneState.NotDone, - "seed": seed, - 'configs': configs - } - -@gin.configurable -def init_db(args): - - if args.use_existing: - scenes = init_db_from_existing(args.output_folder) - elif args.specific_seed is not None: - scenes = [{"seed": s, "all_done": SceneState.NotDone} for s in args.specific_seed] - else: - scenes = [sample_scene_spec(i) for i in range(args.num_scenes)] - - scenes = [s for s in scenes if s is not None] - - if len(scenes) < args.num_scenes: - logging.warning(f'Initialized only {len(scenes)=} despite {args.num_scenes=}. Likely due to --use_existing, --specific_seed or seed_range.') - - return scenes - -def update_symlink(scene_folder, scenes): - for new_name, scene in scenes: - - if scene == JOB_OBJ_SUCCEEDED: - continue - elif isinstance(scene, str): - raise ValueError(f'Failed due to {scene=}') - - to = scene_folder / "logs" / f"{new_name}.out" - - std_out = scene_folder / "logs" / f"{scene.job_id}_0_log.out" - - if os.path.islink(to): - os.unlink(to) - os.unlink(scene_folder / "logs" / f"{new_name}.err") - os.symlink(std_out.resolve(), to) - os.symlink(std_out.with_suffix('.err').resolve(), scene_folder / "logs" / f"{new_name}.err") - -def get_disk_usage(folder): - out = subprocess.check_output(f"df -h {folder.resolve()}".replace(" (Princeton)", "").split()).decode() - return int(re.compile("[\s\S]* ([0-9]+)% [\s\S]*").fullmatch(out).group(1)) / 100 - -def make_html_page(output_path, scenes, frame, camera_pair_id, **kwargs): - env = Environment( - loader=FileSystemLoader("tools"), - autoescape=select_autoescape(), - ) - - template = env.get_template("template.html") - seeds = [scene['seed'] for scene in scenes] - html = template.render( - seeds=seeds, - **kwargs, - frame=frame, - camera_pair_id=camera_pair_id, - ) - - with output_path.open('a') as f: - f.write(html) - -@gin.configurable -def run_task( - queue_func, - scene_folder, - scene_dict, - taskname, - dryrun=False -): - - assert scene_folder.parent.exists(), scene_folder - scene_folder.mkdir(exist_ok=True) - stage_scene_name = f"{scene_folder.parent.stem}_{scene_folder.stem}_{taskname}" - assert not scene_dict.get(f'{taskname}_submitted', False) - - if dryrun: - scene_dict[f'{taskname}_job_obj'] = JOB_OBJ_SUCCEEDED - scene_dict[f'{taskname}_submitted'] = 1 - return - - seed = scene_dict['seed'] - - job_obj, output_folder = queue_func( - folder=scene_folder, - name=stage_scene_name, - seed=seed, - taskname=taskname - ) - scene_dict[f'{taskname}_job_obj'] = job_obj - scene_dict[f'{taskname}_output_folder'] = output_folder - scene_dict[f'{taskname}_submitted'] = 1 # marked as submitted - update_symlink(scene_folder, [(taskname, job_obj)]) - -def check_and_perform_cleanup(args, seed, crashed): - scene_folder = args.output_folder/seed - if args.cleanup == 'all' or (args.cleanup == 'except_crashed' and not crashed): - logging.info(f"{seed} - Removing entirety of {scene_folder}") - rmtree(scene_folder) - elif args.cleanup == 'big_files' or (args.cleanup == 'except_crashed' and crashed): - logging.info(f"{seed} - Cleaning up any large files") - cleanup(scene_folder, verbose=False) - - if args.remove_write: - subprocess.check_output(f"chmod -R a-w {scene_folder}".split()) - -def iterate_sequential_tasks(task_list, get_task_state, overrides, configs, input_indices=None, output_indices=None): - - if len(task_list) == 0: - return JobState.Succeeded - - prev_state = JobState.Succeeded - assert task_list[0].get('condition', 'prev_succeeded') == 'prev_succeeded' - - for i, task_spec in enumerate(task_list): - - # check that we should actually run this step, according to its condition - cond = task_spec.get('condition', 'prev_succeeded') - if cond == 'prev_succeeded' and prev_state != JobState.Succeeded: - return - elif cond == 'prev_failed' and prev_state != JobState.Failed: - continue # we wont run this scene, but skipping doesnt count as crashing - elif cond == 'prev_redundant': - pass # any outcome is fine - - # determine whether the current step failing would be catastrophic - fatal = ( - i + 1 >= len(task_list) or - task_list[i + 1].get('condition', 'prev_succeeded') != 'prev_failed' - ) - - queue_func = partial(task_spec['func'], overrides=overrides, configs=configs, - input_indices=input_indices, output_indices=output_indices) - - taskname = task_spec['name'] + get_suffix(output_indices) - state = get_task_state(taskname=taskname) - yield state, taskname, queue_func, fatal - - prev_state = state - -@gin.configurable -def iterate_scene_tasks( - scene_dict, args, - monitor_all, # if True, enumerate scenes that we might have launched earlier, even if we wouldnt launch them now (due to crashes etc) - - # provided by gin - global_tasks, view_dependent_tasks, camera_dependent_tasks, - frame_range, cam_id_ranges, num_resamples=1, render_frame_range=None, - view_block_size=1, # how many frames should share each `view_dependent_task` - cam_block_size=None, # how many frames should share each `camera_dependent_task` - cleanup_viewdep=False, # cleanup the results of `view_dependent_tasks` once each view iter is done? - viewdep_paralell=True, # can we work on multiple view depenendent tasks (usually `fine`) in paralell? - camdep_paralell=True # can we work on multiple camera dependent tasks (usually render/gt) in paralell? -): - - ''' - This function is a generator which yields all scenes we might want to consider monitoring or running for a particular scene - - It `yield`s the available scenes, regardless of whether they are already running etc - ''' - - for task in global_tasks + view_dependent_tasks + camera_dependent_tasks: - if '_' in task['name']: - raise ValueError(f'{task=} with {task["name"]=} is invalid, must not contain underscores') - - if cam_block_size is None: - cam_block_size = view_block_size - - if cam_id_ranges[0] <= 0 or cam_id_ranges[1] <= 0: - raise ValueError(f'{cam_id_ranges=} is invalid, both num. rigs and num subcams must be >= 1 or no work is done') - assert view_block_size >= 1 - assert cam_block_size >= 1 - if cam_block_size > view_block_size: - cam_block_size = view_block_size - seed = scene_dict['seed'] - - scene_folder = args.output_folder/seed - get_task_state = partial(get_scene_state, scene_dict=scene_dict, scene_folder=scene_folder) - - global_overrides = [ - f'execute_tasks.frame_range={repr(list(frame_range))}', - f'execute_tasks.camera_id=[0, 0]' - ] - global_configs = scene_dict.get('configs', []) + args.configs - global_iter = iterate_sequential_tasks( - global_tasks, - get_task_state, - overrides=args.overrides+global_overrides, - configs=global_configs - ) - - for state, *rest in global_iter: - yield state, *rest - if not state == JobState.Succeeded: - return - - view_range = render_frame_range if render_frame_range is not None else frame_range - view_frames = range(view_range[0], view_range[1] + 1, view_block_size) # blender frame_range is inclusive, but python's range is end-exclusive - resamples = range(num_resamples) - cam_rigs = range(cam_id_ranges[0]) - subcams = range(cam_id_ranges[1]) - - running_views = 0 - for cam_rig, view_frame in itertools.product(cam_rigs, view_frames): - - view_frame_range = [view_frame, min(frame_range[1], view_frame + view_block_size - 1)] # blender frame_end is INCLUSIVE - view_overrides = [ - f'execute_tasks.frame_range=[{view_frame_range[0]},{view_frame_range[1]}]', - f'execute_tasks.camera_id=[{cam_rig},{0}]' - ] - - view_idxs = dict(cam_rig=cam_rig, frame=view_frame) - view_tasks_iter = iterate_sequential_tasks( - view_dependent_tasks, get_task_state, - overrides=args.overrides+view_overrides, - configs=global_configs, output_indices=view_idxs - ) - for state, *rest in view_tasks_iter: - yield state, *rest - if state not in CONCLUDED_STATES: - if viewdep_paralell: - running_views += 1 - continue - else: - return - elif state == JobState.Failed and not monitor_all: - return - - running_blocks = 0 - for subcam, resample_idx in itertools.product(subcams, resamples): - for cam_frame in range(view_frame_range[0], view_frame_range[1] + 1, cam_block_size): - - cam_frame_range = [cam_frame, min(view_frame_range[1], cam_frame + cam_block_size - 1)] # blender frame_end is INCLUSIVE - cam_overrides = [ - f'execute_tasks.frame_range=[{cam_frame_range[0]},{cam_frame_range[1]}]', - f'execute_tasks.camera_id=[{cam_rig},{subcam}]', - f'execute_tasks.resample_idx={resample_idx}' - ] - - camdep_indices = dict( - cam_rig=cam_rig, - frame=cam_frame, - subcam=subcam, - resample=resample_idx, - view_first_frame=view_frame_range[0], - last_view_frame=view_frame_range[1], - last_cam_frame=cam_frame_range[1] # this line explicitly used by most jobs - ) - camera_dep_iter = iterate_sequential_tasks( - camera_dependent_tasks, - get_task_state, - overrides=args.overrides+cam_overrides, - configs=global_configs, - input_indices=view_idxs if len(view_dependent_tasks) else None, - output_indices=camdep_indices - ) - for state, *rest in camera_dep_iter: - yield state, *rest - if state not in CONCLUDED_STATES: - if camdep_paralell: - running_blocks += 1 - continue - else: - return - elif state == JobState.Failed and not monitor_all: - return - - if running_blocks > 0: - running_views += 1 - continue - - key = f'viewdep_{cam_rig}_{view_frame}_cleaned' - if cleanup_viewdep and args.cleanup != 'none' and not scene_dict.get(key, False): - for stage_rec in view_dependent_tasks: - taskname = stage_rec['name'] - path = scene_dict[f'{taskname}_output_folder'] - print(f'Cleaning {path} for {taskname}') - if path == scene_folder: - continue - if path is not None and path.exists(): - cleanup(path) - scene_dict[key] = True - - if running_views > 0: - return - - # Upload - if args.upload: - state = get_task_state(taskname='upload') - yield state, 'upload', queue_upload, True - if state != JobState.Succeeded: - return - - if scene_dict['all_done'] != SceneState.NotDone: - return - - # Cleanup - with (args.output_folder / "finished_seeds.txt").open('a') as f: - f.write(f"{seed}\n") - scene_dict['all_done'] = SceneState.Done - check_and_perform_cleanup(args, seed, crashed=False) - -def infer_crash_reason(stdout_file, stderr_file: Path): - - if not stderr_file.exists(): - return f'{stderr_file} not found' - - try: - error_log = stderr_file.read_text() - except UnicodeDecodeError: - return f"failed to parse log file {stderr_file}" - - if "System is out of GPU memory" in error_log: - return "Out of GPU memory" - elif "this scene is timed-out" in error_log or 'DUE TO TIME LIMIT' in error_log: - return "Timed out" - elif "" in error_log: - return "SIGKILL: 9 (out-of-memory, probably)" - elif "SIGCONT" in error_log: - return "SIGCONT (timeout?)" - elif "srun: error" in error_log: - return "srun error" - - if not stdout_file.exists(): - return f'{stdout_file} not found' - if not stderr_file.exists(): - return f'{stderr_file} not found' - - output_text = f"{stdout_file.read_text()}\n{stderr_file.read_text()}\n" - matches = re.findall("(Error:[^\n]+)\n", output_text) - - ignore_errors = [ - 'Error: Not freed memory blocks', - ] - - matches = [m for m in matches if not any(w in m for w in ignore_errors)] - - if len(matches): - return ','.join(matches) - else: - return f"Could not summarize cause, check {stderr_file}" - -def record_crashed_seed(crashed_seed, crash_stage, f, fatal=True): - time_str = datetime.now().strftime("%m/%d %I:%M%p") - stdout_file = args.output_folder / crashed_seed / "logs" / f"{crash_stage}.out" - stderr_file = args.output_folder / crashed_seed / "logs" / f"{crash_stage}.err" - - scene_id, *_ = stderr_file.resolve().stem.split('_') - node_of_scene = node_from_slurm_jobid(scene_id) - - reason = infer_crash_reason(stdout_file, stderr_file) - text = f"{crashed_seed} {crash_stage} {scene_id} {node_of_scene} {reason} {fatal=} {time_str}\n" - print('Crashed: ' + text) - f.write(text) - - return reason - -def write_html_summary(all_scenes, output_folder, max_size=5000): - - names = [("index" if (idx == 0) else f"index_{idx}") for idx in range(0, len(all_scenes), max_size)] - for name, idx in zip(names, range(0, len(all_scenes), max_size)): - html_path = output_folder / f"{name}.html" - if not html_path.exists(): - make_html_page(html_path, all_scenes[idx:idx+max_size], frame=100, - camera_pair_id=0, samples=[f"resmpl{i}" for i in range(5)], pages=names, - ) - -def stats_summary(stats): - stats = {k: v for k, v in stats.items() if not k.startswith(JobState.NotQueued)} - lemmatized = set(l.split('_')[0] for l in stats.keys()) - stats = {l: sum(v for k, v in stats.items() if k.startswith(l)) for l in lemmatized} - - uniq_keys = set(k.split('/')[0] for k in stats.keys()) - totals = {p: sum(v for k, v in stats.items() if k.startswith(p)) for p in uniq_keys} - - for k, v in totals.items(): - stats[f'{k}/total'] = v - - return stats, totals - -def monitor_existing_jobs(all_scenes): - - stats = defaultdict(int) - - for scene in all_scenes: - - scene['num_running'], scene['num_done'] = 0, 0 - any_fatal = False - for state, taskname, _, fatal in iterate_scene_tasks(scene, args, monitor_all=True): - - if state == JobState.NotQueued: - continue - - stats[f'{state}/{taskname}'] += 1 - scene['num_done'] += state in CONCLUDED_STATES - scene['num_running'] += state not in CONCLUDED_STATES - - if state == JobState.Failed: - if not scene.get(f'{taskname}_crash_recorded', False): - scene[f'{taskname}_crash_recorded'] = True - with (args.output_folder / "crash_summaries.txt").open('a') as f: - record_crashed_seed(scene['seed'], taskname, f, fatal=fatal) - if fatal: - any_fatal = True - - if any_fatal: - scene['any_fatal_crash'] = True - - if scene['num_running'] == 0 and any_fatal and scene['all_done'] == SceneState.NotDone: - scene['all_done'] = SceneState.Crashed - with (args.output_folder / "crash_summaries.txt").open('a') as f: - check_and_perform_cleanup(args, scene['seed'], crashed=True) - - return stats - -def jobs_to_launch_next(all_scenes, greedy=True): - scenes = [j for j in all_scenes if (j["all_done"] == SceneState.NotDone)] - if greedy: - scenes = sorted(scenes, key=lambda s: s['num_running'] + s['num_done'], reverse=True) - for scene in scenes: - if scene.get('any_fatal_crash', False): - continue - for state, taskname, queue_func, _ in iterate_scene_tasks(scene, args, monitor_all=False): - if state != JobState.NotQueued: - continue - yield scene, taskname, queue_func - -@gin.configurable -def manage_datagen_jobs(all_scenes, elapsed, num_concurrent, disk_sleep_threshold=0.95): - - if LocalScheduleHandler._inst is not None: - LocalScheduleHandler.instance().poll() - - warmup_pct = min(elapsed / args.warmup_sec, 1) if args.warmup_sec > 0 else 1 - curr_concurrent_max = math.ceil(warmup_pct * num_concurrent) - - # Check results / current state of scenes we have already launched - stats = monitor_existing_jobs(all_scenes) - stats, totals = stats_summary(stats) - - n_in_flight = totals.get(JobState.Running, 0) + totals.get(JobState.Queued, 0) - if n_in_flight > curr_concurrent_max: - raise ValueError(f'manage_datagen_jobs observed {n_in_flight=}, which exceeds allowed {curr_concurrent_max=}') - n_to_launch = max(curr_concurrent_max - n_in_flight, 0) - - pd.DataFrame.from_records(all_scenes).to_csv(args.output_folder/'scenes_db.csv') - - stats['n_in_flight'] = n_in_flight - stats['n_launching'] = n_to_launch - stats['disk_usage'] = get_disk_usage(args.output_folder) - stats['concurrent_max'] = curr_concurrent_max - wandb.log(stats) - print("=" * 60) - for k,v in sorted(stats.items()): - print(f"{k.ljust(30)} : {v}") - print("-" * 60) - - # Dont launch new scenes if disk is getting full - if stats['disk_usage'] > disk_sleep_threshold: - print(f"{args.output_folder} is too full ({get_disk_usage(args.output_folder)}%). Sleeping.") - wandb.alert(title='Disk full', text=f'Sleeping due to full disk at {args.output_folder=}', wait_duration=3*60*60) - time.sleep(60) - return - - # Launch to get back to intended n=`curr_concurrent_max` that should be in flight - for spec in itertools.islice(jobs_to_launch_next(all_scenes), n_to_launch): - scene, taskname, queue_func = spec - logging.info(f"{scene['seed']} - running {taskname}") - run_task(queue_func, args.output_folder / str(scene['seed']), scene, taskname) - -@gin.configurable -def main(args, shuffle=True, wandb_project='render_beta'): - - os.umask(0o007) - - all_scenes = init_db(args) - scene_name = args.output_folder.parts[-1] - - write_html_summary(all_scenes, args.output_folder) if args.cleanup != 'all' else None - wandb.init(name=scene_name, config=vars(args), project=wandb_project, mode=args.wandb_mode) - - logging.basicConfig( - #filename=str(args.output_folder / "jobs.log"), - level=args.loglevel, - format='[%(asctime)s]: %(message)s', - ) - - start_time = datetime.now() - - scenes = [j for j in all_scenes if j['all_done'] == SceneState.NotDone] - if shuffle: - np.random.shuffle(scenes) - else: - scenes = sorted(scenes, key=lambda j: j['seed']) - while any(j['all_done'] == SceneState.NotDone for j in all_scenes): - now = datetime.now() - print(f'{args.output_folder} {start_time.strftime("%m/%d %I:%M%p")} -> {now.strftime("%m/%d %I:%M%p")}') - manage_datagen_jobs(scenes, elapsed=(now-start_time).total_seconds()) - time.sleep(4) - - -def set_blender_path_global(args): - - global BLENDER_PATH - if args.blender_path is None: - if 'BLENDER' in os.environ: - BLENDER_PATH = os.environ['BLENDER'] - else: - BLENDER_PATH = '../blender/blender' # assuming we run from infinigen/worldgen - else: - BLENDER_PATH = args.blender_path - if not os.path.exists(BLENDER_PATH): - raise ValueError(f'Couldnt not find {BLENDER_PATH=}, make sure --blender_path or $BLENDER is specified') - -if __name__ == "__main__": - assert Path('.').resolve().parts[-1] == 'worldgen' - - slurm_available = (which("sbatch") is not None) - parser = argparse.ArgumentParser() # to guarantee that the render scenes finish, try render_image.time_limit=2000 - parser.add_argument( - '-o', - '--output_folder', - type=Path, - required=True - ) - parser.add_argument( - '--blender_path', - type=str, - default=None, - help="Full path to a `blender` executable with all dependencies installed. If set to None, the system will use the $BLENDER environment variable" - ) - parser.add_argument( - '--num_scenes', - type=int, - default=1, - help="Number of scenes to attempt before terminating" - ) - parser.add_argument( - '--meta_seed', - type=int, - default=None, - help="What seed should be used to determine the random seeds of each scene? Leave as None unless deliberately replicat" - ) - parser.add_argument( - '--specific_seed', - default=None, - nargs='+', - help="The default, None, will choose a random seed per scene. Otherwise, all scenes will have the specified seed. Interpreted as an integer if possible." - ) - parser.add_argument( - '--use_existing', - action='store_true', - help="If set, then assume output_folder is an existing folder from a terminated run, and make a best-possible-effort to resume from where it left off" - ) - parser.add_argument( - '--warmup_sec', - type=float, - default=0, - help="Perform a staggered start over the specified period, so that jobs dont sync up or all write to disk at similar times." - ) - parser.add_argument( - '--cleanup', - type=str, - choices=['all', 'big_files', 'none', 'except_crashed'], - default='none', - help="What files should be cleaned up by the manager as it runs?" - ) - parser.add_argument( - '--remove_write', - action='store_true', - help="If set, remove Unix write permissions from the generated files, to prevent a user accidentally deleting data." - ) - parser.add_argument( - '--upload', - action='store_true', - help="If set, attempt to upload scenes as tarballs to GDrive of SMB depending on configs. See `upload_util.py` for more details before using." - ) - parser.add_argument( - '--configs', - nargs='*', - default=[], - help="List of gin config names to pass through to all underlying scene generation jobs." - ) - parser.add_argument( - '-p', - '--overrides', - nargs='+', - type=str, - default=[], - help="List of gin overrides to pass through to all underlying scene generation jobs" - ) - parser.add_argument( - '--wandb_mode', - type=str, - default='disabled', - choices=['online', 'offline', 'disabled'], - help="Mode kwarg for wandb.init(). Set up wandb before use." - ) - parser.add_argument( - '--pipeline_configs', - type=str, - nargs='+', - help="List of gin config names from tools/pipeline_configs to configure this execution" - ) - parser.add_argument( - '--pipeline_overrides', - nargs='+', - type=str, - default=[], - help="List of gin overrides to configure this execution", - ) - parser.add_argument('--overwrite', action='store_true') - parser.add_argument('-d', '--debug', action="store_const", dest="loglevel", const=logging.DEBUG, default=logging.INFO) - parser.add_argument( '-v', '--verbose', action="store_const", dest="loglevel", const=logging.INFO) - args = parser.parse_args() - - if not args.upload and args.cleanup == 'all': - raise ValueError(f'Pipeline is configured with {args.cleanup=} yet {args.upload=}! No output would be preserved!') - if args.upload and args.cleanup == 'none': - raise ValueError(f'--upload currently applies --cleanup big_files') - assert args.specific_seed is None or args.num_scenes == 1 - set_blender_path_global(args) - - overwrite_ok = args.use_existing or args.overwrite - if args.output_folder.exists() and not overwrite_ok: - raise FileExistsError(f'--output_folder {args.output_folder} already exists! Please delete it, specify a different --output_folder, or use --overwrite') - args.output_folder.mkdir(parents=True, exist_ok=overwrite_ok) - - if args.meta_seed is not None: - random.seed(args.meta_seed) - np.random.seed(args.meta_seed) - - def find_config(g): - for p in Path('infinigen/datagen/configs').glob('**/*.gin'): - if p.parts[-1] == g: - return p - if p.parts[-1] == f'{g}.gin': - return p - raise ValueError(f'Couldn not locate {g} or {g}.gin in anywhere pipeline_configs/**') - configs = [find_config(n) for n in ['base.gin'] + args.pipeline_configs] - for c in configs: - assert os.path.exists(c), c - bindings = args.pipeline_overrides - gin.parse_config_files_and_bindings(configs, bindings=bindings) - - main(args) diff --git a/infinigen/datagen/tools/blendscript_import_infinigen.py b/infinigen/datagen/tools/blendscript_import_infinigen.py index 7c09d5666..01b993aa8 100644 --- a/infinigen/datagen/tools/blendscript_import_infinigen.py +++ b/infinigen/datagen/tools/blendscript_import_infinigen.py @@ -13,8 +13,6 @@ import sys, os pwd = os.getcwd() -if not pwd.endswith('worldgen'): - raise ValueError(f'Current working directory is {pwd}, please cd infinigen/worldgen and run ../blender/blender ...') sys.path.append(pwd) import generate # so gin can find all its targets diff --git a/infinigen/datagen/tools/dev/generate_terrain_assets.py b/infinigen/datagen/tools/dev/generate_terrain_assets.py index 4a5facc09..3d3f81b63 100644 --- a/infinigen/datagen/tools/dev/generate_terrain_assets.py +++ b/infinigen/datagen/tools/dev/generate_terrain_assets.py @@ -20,8 +20,8 @@ from terrain.assets.landtiles import landtile_asset from terrain.assets.upsidedown_mountains import upsidedown_mountains_asset from util import blender as butil -from util.math import int_hash, FixedSeed -from util.organization import Assets, LandTile, AssetFile +from infinigen.core.util.math import int_hash, FixedSeed +from infinigen.core.util.organization import Assets, LandTile, AssetFile def asset_generation( diff --git a/infinigen/datagen/tools/dev/landtile_viewer.py b/infinigen/datagen/tools/dev/landtile_viewer.py index 494025f1b..4d23be24d 100644 --- a/infinigen/datagen/tools/dev/landtile_viewer.py +++ b/infinigen/datagen/tools/dev/landtile_viewer.py @@ -14,8 +14,8 @@ import numpy as np from nodes.node_wrangler import Nodes, NodeWrangler from terrain.utils import Mesh, read -from util.blender import clear_scene -from util.organization import AssetFile +from infinigen.core.util.blender import clear_scene +from infinigen.core.util.organization import AssetFile if __name__ == "__main__": parser = argparse.ArgumentParser() diff --git a/infinigen/datagen/tools/dev/palette/readme.md b/infinigen/datagen/tools/dev/palette/readme.md index a8446b367..0b510dc45 100644 --- a/infinigen/datagen/tools/dev/palette/readme.md +++ b/infinigen/datagen/tools/dev/palette/readme.md @@ -5,7 +5,7 @@ This palette generating tool is enabled using `GoogleImagesSearch` (currently us ## Step 1 ``` -cd worldgen/tools/palette/ +cd infinigen/tools/terrain/palette/ # you can change "mountain rock" to other key words python palette.py -k "mountain rock" ``` @@ -30,7 +30,7 @@ After manually comemnt out them, you have: ![](demo4.png) -Then you move the ready palatte to location: `infinigen/worldgen/config/palette` +Then you move the ready palatte to location: `infinigen/examples/configs/palette` ## Step 3 diff --git a/infinigen/datagen/util/submitit_emulator.py b/infinigen/datagen/util/submitit_emulator.py index 11ddf6513..854818a59 100644 --- a/infinigen/datagen/util/submitit_emulator.py +++ b/infinigen/datagen/util/submitit_emulator.py @@ -249,7 +249,7 @@ def get_all_processes(): if test == 'render': - random_command = "python generate.py -- --seed 56823 --task coarse -p main.output_folder=outputs/test2 move_camera.stereo_baseline=0.15 LOG_DIR=logs" + random_command = "python examples/generate_nature.py -- --seed 56823 --task coarse -p main.output_folder=outputs/test2 move_camera.stereo_baseline=0.15 LOG_DIR=logs" executor = ScheduledLocalExecutor(folder="test_log") executor.update_parameters(gpus=1) diff --git a/infinigen/terrain/assets/caves/core.py b/infinigen/terrain/assets/caves/core.py index 12a665f2a..f42ebb1f8 100644 --- a/infinigen/terrain/assets/caves/core.py +++ b/infinigen/terrain/assets/caves/core.py @@ -8,13 +8,14 @@ import bpy import gin -import terrain.mesh_to_sdf as mesh_to_sdf import numpy as np from numpy import ascontiguousarray as AC -from terrain.utils import Mesh -from util.blender import SelectObjects, ViewportMode -from util.math import FixedSeed -from util.organization import AssetFile + +import infinigen.terrain.mesh_to_sdf as mesh_to_sdf +from infinigen.terrain.utils import Mesh +from infinigen.core.util.blender import SelectObjects, ViewportMode +from infinigen.core.util.math import FixedSeed +from infinigen.core.util.organization import AssetFile from .geometry_utils import increment_step, pitch_up, yaw_clockwise from .pcfg import generate_string diff --git a/infinigen/terrain/assets/landtiles/ant_landscape.py b/infinigen/terrain/assets/landtiles/ant_landscape.py index 661f7e6b2..058f3b7a8 100644 --- a/infinigen/terrain/assets/landtiles/ant_landscape.py +++ b/infinigen/terrain/assets/landtiles/ant_landscape.py @@ -9,10 +9,11 @@ import bpy import cv2 import numpy as np -from terrain.land_process.erosion import run_erosion -from terrain.land_process.snowfall import run_snowfall -from terrain.utils import smooth, random_int -from util.organization import AssetFile, LandTile + +from infinigen.terrain.land_process.erosion import run_erosion +from infinigen.terrain.land_process.snowfall import run_snowfall +from infinigen.terrain.utils import smooth, random_int +from infinigen.core.util.organization import AssetFile, LandTile def create( diff --git a/infinigen/terrain/assets/landtiles/core.py b/infinigen/terrain/assets/landtiles/core.py index aa2d0755a..6f1c265c6 100644 --- a/infinigen/terrain/assets/landtiles/core.py +++ b/infinigen/terrain/assets/landtiles/core.py @@ -9,8 +9,8 @@ import cv2 import gin import numpy as np -from terrain.utils import boundary_smooth, read, smooth -from util.organization import AssetFile, LandTile, Process +from infinigen.terrain.utils import boundary_smooth, read, smooth +from infinigen.core.util.organization import AssetFile, LandTile, Process from .ant_landscape import ant_landscape_asset from .custom import coast_asset, multi_mountains_asset, coast_params, multi_mountains_params diff --git a/infinigen/terrain/assets/landtiles/custom.py b/infinigen/terrain/assets/landtiles/custom.py index 0b75917c5..c8f6e4d0c 100644 --- a/infinigen/terrain/assets/landtiles/custom.py +++ b/infinigen/terrain/assets/landtiles/custom.py @@ -10,13 +10,13 @@ import cv2 import gin import numpy as np -from terrain.elements.core import Element -from terrain.elements.mountains import Mountains -from terrain.land_process.erosion import run_erosion -from terrain.land_process.snowfall import run_snowfall -from terrain.utils import grid_distance, perlin_noise, random_int -from util.organization import AssetFile -from util.random import random_general as rg +from infinigen.terrain.elements.core import Element +from infinigen.terrain.elements.mountains import Mountains +from infinigen.terrain.land_process.erosion import run_erosion +from infinigen.terrain.land_process.snowfall import run_snowfall +from infinigen.terrain.utils import grid_distance, perlin_noise, random_int +from infinigen.core.util.organization import AssetFile +from infinigen.core.util.random import random_general as rg coast_params_ = {} diff --git a/infinigen/terrain/assets/ocean.py b/infinigen/terrain/assets/ocean.py index 46c1a6c80..f669e9ff3 100644 --- a/infinigen/terrain/assets/ocean.py +++ b/infinigen/terrain/assets/ocean.py @@ -10,10 +10,10 @@ import gin import os import shutil -from terrain.utils import random_int -from util.blender import ViewportMode -from util.logging import Timer -from util.random import random_general as rg +from infinigen.terrain.utils import random_int +from infinigen.core.util.blender import ViewportMode +from infinigen.core.util.logging import Timer +from infinigen.core.util.random import random_general as rg spatial_size = 40 diff --git a/infinigen/terrain/assets/upsidedown_mountains.py b/infinigen/terrain/assets/upsidedown_mountains.py index 0b05ebfa3..76ff8870f 100644 --- a/infinigen/terrain/assets/upsidedown_mountains.py +++ b/infinigen/terrain/assets/upsidedown_mountains.py @@ -13,12 +13,12 @@ from landlab.components import FlowDirectorSteepest, TransportLengthHillslopeDiffuser from numpy import ascontiguousarray as AC from skimage.measure import label -from terrain.elements.core import Element -from terrain.elements.mountains import Mountains -from terrain.utils import read +from infinigen.terrain.elements.core import Element +from infinigen.terrain.elements.mountains import Mountains +from infinigen.terrain.utils import read from tqdm import tqdm -from util.organization import AssetFile -from util.random import random_general as rg +from infinigen.core.util.organization import AssetFile +from infinigen.core.util.random import random_general as rg @gin.configurable diff --git a/infinigen/terrain/core.py b/infinigen/terrain/core.py index 830f30329..4b6bd7a34 100644 --- a/infinigen/terrain/core.py +++ b/infinigen/terrain/core.py @@ -12,16 +12,16 @@ import gin import numpy as np from mathutils.bvhtree import BVHTree -from terrain.mesher import OpaqueSphericalMesher, TransparentSphericalMesher, UniformMesher -from terrain.scene import scene, transfer_scene_info -from terrain.surface_kernel.core import SurfaceKernel -from terrain.utils import Mesh, move_modifier, Vars, AttributeType, FieldsType -from terrain.assets.ocean import ocean_asset -from util.blender import SelectObjects, delete -from util.logging import Timer -from util.math import FixedSeed, int_hash -from util.organization import SurfaceTypes, Attributes, Task, TerrainNames, ElementNames, Transparency, Materials, Assets, ElementTag, Tags, SelectionCriterions -from assets.utils.tag import tag_object, tag_system +from infinigen.terrain.mesher import OpaqueSphericalMesher, TransparentSphericalMesher, UniformMesher +from infinigen.terrain.scene import scene, transfer_scene_info +from infinigen.terrain.surface_kernel.core import SurfaceKernel +from infinigen.terrain.utils import Mesh, move_modifier, Vars, AttributeType, FieldsType +from infinigen.terrain.assets.ocean import ocean_asset +from infinigen.core.util.blender import SelectObjects, delete +from infinigen.core.util.logging import Timer +from infinigen.core.util.math import FixedSeed, int_hash +from infinigen.core.util.organization import SurfaceTypes, Attributes, Task, TerrainNames, ElementNames, Transparency, Materials, Assets, ElementTag, Tags, SelectionCriterions +from infinigen.assets.utils.tag import tag_object, tag_system from numpy import ascontiguousarray as AC logger = logging.getLogger('terrain') diff --git a/infinigen/terrain/elements/atmosphere.py b/infinigen/terrain/elements/atmosphere.py index 3b1b40fee..054ac651b 100644 --- a/infinigen/terrain/elements/atmosphere.py +++ b/infinigen/terrain/elements/atmosphere.py @@ -7,7 +7,7 @@ import gin import numpy as np from numpy import ascontiguousarray as AC -from util.organization import Materials, Transparency, ElementNames +from infinigen.core.util.organization import Materials, Transparency, ElementNames from .core import Element diff --git a/infinigen/terrain/elements/caves.py b/infinigen/terrain/elements/caves.py index dd10210ed..22d98a920 100644 --- a/infinigen/terrain/elements/caves.py +++ b/infinigen/terrain/elements/caves.py @@ -9,11 +9,11 @@ import gin import numpy as np from numpy import ascontiguousarray as AC -from terrain.assets.caves import assets_to_data, caves_asset -from terrain.utils import random_int, random_int_large -from util.math import FixedSeed, int_hash -from util.random import random_general as rg -from util.organization import AssetFile +from infinigen.terrain.assets.caves import assets_to_data, caves_asset +from infinigen.terrain.utils import random_int, random_int_large +from infinigen.core.util.math import FixedSeed, int_hash +from infinigen.core.util.random import random_general as rg +from infinigen.core.util.organization import AssetFile from .core import Element diff --git a/infinigen/terrain/elements/core.py b/infinigen/terrain/elements/core.py index 124543bdb..688d8f5e6 100644 --- a/infinigen/terrain/elements/core.py +++ b/infinigen/terrain/elements/core.py @@ -8,8 +8,8 @@ import numpy as np from numpy import ascontiguousarray as AC -from terrain.utils import ASFLOAT, ASINT, Vars, load_cdll, register_func -from util.organization import Materials +from infinigen.terrain.utils import ASFLOAT, ASINT, Vars, load_cdll, register_func +from infinigen.core.util.organization import Materials class Element: diff --git a/infinigen/terrain/elements/ground.py b/infinigen/terrain/elements/ground.py index 2d7a2ed84..4dfacc810 100644 --- a/infinigen/terrain/elements/ground.py +++ b/infinigen/terrain/elements/ground.py @@ -7,9 +7,9 @@ import gin import numpy as np from numpy import ascontiguousarray as AC -from terrain.utils import random_int -from util.organization import Materials, Transparency, Tags, ElementNames, ElementTag -from util.random import random_general as rg +from infinigen.terrain.utils import random_int +from infinigen.core.util.organization import Materials, Transparency, Tags, ElementNames, ElementTag +from infinigen.core.util.random import random_general as rg from .core import Element diff --git a/infinigen/terrain/elements/landtiles.py b/infinigen/terrain/elements/landtiles.py index 070665dc9..4a53ed1e5 100644 --- a/infinigen/terrain/elements/landtiles.py +++ b/infinigen/terrain/elements/landtiles.py @@ -9,11 +9,12 @@ import gin import numpy as np from numpy import ascontiguousarray as AC -from terrain.assets.landtiles import assets_to_data, landtile_asset -from terrain.utils import random_int, random_int_large -from util.math import FixedSeed, int_hash -from util.organization import Tags, Materials, LandTile, Process, Transparency, ElementNames, ElementTag, AssetFile -from util.random import random_general as rg + +from infinigen.terrain.assets.landtiles import assets_to_data, landtile_asset +from infinigen.terrain.utils import random_int, random_int_large +from infinigen.core.util.math import FixedSeed, int_hash +from infinigen.core.util.organization import Tags, Materials, LandTile, Process, Transparency, ElementNames, ElementTag, AssetFile +from infinigen.core.util.random import random_general as rg from .core import Element diff --git a/infinigen/terrain/elements/mountains.py b/infinigen/terrain/elements/mountains.py index 5a944c366..52992acdf 100644 --- a/infinigen/terrain/elements/mountains.py +++ b/infinigen/terrain/elements/mountains.py @@ -7,9 +7,9 @@ import gin import numpy as np from numpy import ascontiguousarray as AC -from terrain.utils import random_int -from util.organization import Materials, Transparency, ElementNames, ElementTag -from util.random import random_general as rg +from infinigen.terrain.utils import random_int +from infinigen.core.util.organization import Materials, Transparency, ElementNames, ElementTag +from infinigen.core.util.random import random_general as rg from .core import Element diff --git a/infinigen/terrain/elements/upsidedown_mountains.py b/infinigen/terrain/elements/upsidedown_mountains.py index d4d904b2d..7e73fadce 100644 --- a/infinigen/terrain/elements/upsidedown_mountains.py +++ b/infinigen/terrain/elements/upsidedown_mountains.py @@ -9,10 +9,10 @@ import gin import numpy as np from numpy import ascontiguousarray as AC -from terrain.assets.upsidedown_mountains import assets_to_data, upsidedown_mountains_asset -from terrain.utils import random_int, random_int_large -from util.math import FixedSeed, int_hash -from util.organization import Materials, Transparency, ElementNames, ElementTag, Tags, AssetFile +from infinigen.terrain.assets.upsidedown_mountains import assets_to_data, upsidedown_mountains_asset +from infinigen.terrain.utils import random_int, random_int_large +from infinigen.core.util.math import FixedSeed, int_hash +from infinigen.core.util.organization import Materials, Transparency, ElementNames, ElementTag, Tags, AssetFile from .core import Element diff --git a/infinigen/terrain/elements/voronoi_rocks.py b/infinigen/terrain/elements/voronoi_rocks.py index b37cfbf52..217832a0e 100644 --- a/infinigen/terrain/elements/voronoi_rocks.py +++ b/infinigen/terrain/elements/voronoi_rocks.py @@ -7,8 +7,8 @@ import gin import numpy as np from numpy import ascontiguousarray as AC -from terrain.utils import random_int -from util.organization import Materials, ElementNames, Transparency, ElementTag, Tags +from infinigen.terrain.utils import random_int +from infinigen.core.util.organization import Materials, ElementNames, Transparency, ElementTag, Tags from .core import Element from .landtiles import LandTiles diff --git a/infinigen/terrain/elements/warped_rocks.py b/infinigen/terrain/elements/warped_rocks.py index a3e1f8c57..75392915c 100644 --- a/infinigen/terrain/elements/warped_rocks.py +++ b/infinigen/terrain/elements/warped_rocks.py @@ -7,8 +7,8 @@ import gin import numpy as np from numpy import ascontiguousarray as AC -from terrain.utils import random_int -from util.organization import Materials, ElementNames, Transparency, ElementTag, Tags +from infinigen.terrain.utils import random_int +from infinigen.core.util.organization import Materials, ElementNames, Transparency, ElementTag, Tags from .core import Element diff --git a/infinigen/terrain/elements/waterbody.py b/infinigen/terrain/elements/waterbody.py index 0408d72be..cff581fe5 100644 --- a/infinigen/terrain/elements/waterbody.py +++ b/infinigen/terrain/elements/waterbody.py @@ -7,7 +7,7 @@ import gin import numpy as np from numpy import ascontiguousarray as AC -from util.organization import Materials, Transparency, ElementNames, ElementTag, Attributes +from infinigen.core.util.organization import Materials, Transparency, ElementNames, ElementTag, Attributes from .core import Element diff --git a/infinigen/terrain/land_process/erosion.py b/infinigen/terrain/land_process/erosion.py index 1d175230c..114d52f3e 100644 --- a/infinigen/terrain/land_process/erosion.py +++ b/infinigen/terrain/land_process/erosion.py @@ -10,8 +10,8 @@ import gin import numpy as np from numpy import ascontiguousarray as AC -from terrain.utils import ASFLOAT, load_cdll, read, smooth -from util.organization import AssetFile, Process +from infinigen.terrain.utils import ASFLOAT, load_cdll, read, smooth +from infinigen.core.util.organization import AssetFile, Process @gin.configurable @@ -47,7 +47,7 @@ def run_erosion( watertrack = np.zeros_like(heightmap) func( ASFLOAT(heightmap), ASFLOAT(result_heightmap), ASFLOAT(watertrack), - N, N, 0, n_iter, 0, spatial * tile_size, "terrain/source/cpu/soil_machine/soil/sand.soil".encode('utf-8'), + N, N, 0, n_iter, 0, spatial * tile_size, "infinigen/terrain/source/cpu/soil_machine/soil/sand.soil".encode('utf-8'), ) heightmap = result_heightmap + ground_level watertrack = watertrack.reshape((N, N)) diff --git a/infinigen/terrain/land_process/snowfall.py b/infinigen/terrain/land_process/snowfall.py index 961b5d817..fe95a46c6 100644 --- a/infinigen/terrain/land_process/snowfall.py +++ b/infinigen/terrain/land_process/snowfall.py @@ -9,10 +9,11 @@ import numpy as np from landlab import RasterModelGrid from landlab.components import FlowDirectorSteepest, TransportLengthHillslopeDiffuser -from terrain.utils import get_normal, read, smooth + +from infinigen.terrain.utils import get_normal, read, smooth from tqdm import tqdm -from util.organization import AssetFile, Process -from util.random import random_general as rg +from infinigen.core.util.organization import AssetFile, Process +from infinigen.core.util.random import random_general as rg snowfall_params_ = {} @gin.configurable diff --git a/infinigen/terrain/mesher/_marching_cubes_lewiner.py b/infinigen/terrain/mesher/_marching_cubes_lewiner.py index cb655d121..4ad515e17 100644 --- a/infinigen/terrain/mesher/_marching_cubes_lewiner.py +++ b/infinigen/terrain/mesher/_marching_cubes_lewiner.py @@ -8,7 +8,7 @@ import numpy as np from . import _marching_cubes_lewiner_luts as mcluts -from terrain import _marching_cubes_lewiner_cy +from infinigen.terrain import marching_cubes as _marching_cubes_lewiner_cy def marching_cubes(volume, level=None, *, spacing=(1., 1., 1.), diff --git a/infinigen/terrain/mesher/cube_spherical_mesher.py b/infinigen/terrain/mesher/cube_spherical_mesher.py index 5a232ec41..a5d09064b 100644 --- a/infinigen/terrain/mesher/cube_spherical_mesher.py +++ b/infinigen/terrain/mesher/cube_spherical_mesher.py @@ -10,9 +10,9 @@ import numpy as np from numpy import ascontiguousarray as AC from ._marching_cubes_lewiner import marching_cubes -from terrain.utils import ASDOUBLE, ASINT, Mesh, write_attributes, register_func, load_cdll -from terrain.utils import Timer as tTimer -from util.organization import Tags +from infinigen.terrain.utils import ASDOUBLE, ASINT, Mesh, write_attributes, register_func, load_cdll +from infinigen.terrain.utils import Timer as tTimer +from infinigen.core.util.organization import Tags from tqdm import tqdm @gin.configurable("CubeSphericalMesherTimer") diff --git a/infinigen/terrain/mesher/frontview_spherical_mesher.py b/infinigen/terrain/mesher/frontview_spherical_mesher.py index 5d7ff61c3..881a8c7b5 100644 --- a/infinigen/terrain/mesher/frontview_spherical_mesher.py +++ b/infinigen/terrain/mesher/frontview_spherical_mesher.py @@ -10,8 +10,8 @@ import numpy as np from numpy import ascontiguousarray as AC from ._marching_cubes_lewiner import marching_cubes -from terrain.utils import Mesh, ASDOUBLE, ASINT, write_attributes, register_func, load_cdll -from terrain.utils import Timer as tTimer +from infinigen.terrain.utils import Mesh, ASDOUBLE, ASINT, write_attributes, register_func, load_cdll +from infinigen.terrain.utils import Timer as tTimer from tqdm import tqdm @gin.configurable("FrontviewSphericalMesherTimer") diff --git a/infinigen/terrain/mesher/spherical_mesher.py b/infinigen/terrain/mesher/spherical_mesher.py index 0411231b1..80598b784 100644 --- a/infinigen/terrain/mesher/spherical_mesher.py +++ b/infinigen/terrain/mesher/spherical_mesher.py @@ -7,8 +7,8 @@ import numpy as np import gin -from util.logging import Timer -from terrain.utils import Mesh, get_caminfo, write_attributes, Vars +from infinigen.core.util.logging import Timer +from infinigen.terrain.utils import Mesh, get_caminfo, write_attributes, Vars from .cube_spherical_mesher import CubeSphericalMesher from .frontview_spherical_mesher import FrontviewSphericalMesher diff --git a/infinigen/terrain/mesher/uniform_mesher.py b/infinigen/terrain/mesher/uniform_mesher.py index 7961fee37..bbce11037 100644 --- a/infinigen/terrain/mesher/uniform_mesher.py +++ b/infinigen/terrain/mesher/uniform_mesher.py @@ -9,9 +9,9 @@ import gin import numpy as np from numpy import ascontiguousarray as AC -from terrain.utils import ASDOUBLE, ASINT, Mesh -from terrain.utils import Timer as tTimer -from terrain.utils import Vars, load_cdll, register_func, write_attributes +from infinigen.terrain.utils import ASDOUBLE, ASINT, Mesh +from infinigen.terrain.utils import Timer as tTimer +from infinigen.terrain.utils import Vars, load_cdll, register_func, write_attributes from ._marching_cubes_lewiner import marching_cubes diff --git a/infinigen/terrain/scene.py b/infinigen/terrain/scene.py index 50eb9178e..4a0385ff7 100644 --- a/infinigen/terrain/scene.py +++ b/infinigen/terrain/scene.py @@ -5,18 +5,18 @@ import gin -from terrain.elements.caves import Caves -from terrain.elements.ground import Ground -from terrain.elements.landtiles import LandTiles, Volcanos, FloatingIce -from terrain.elements.upsidedown_mountains import UpsidedownMountains -from terrain.elements.voronoi_rocks import VoronoiRocks, VoronoiGrains -from terrain.elements.warped_rocks import WarpedRocks -from terrain.elements.waterbody import Waterbody -from terrain.elements.atmosphere import Atmosphere +from infinigen.terrain.elements.caves import Caves +from infinigen.terrain.elements.ground import Ground +from infinigen.terrain.elements.landtiles import LandTiles, Volcanos, FloatingIce +from infinigen.terrain.elements.upsidedown_mountains import UpsidedownMountains +from infinigen.terrain.elements.voronoi_rocks import VoronoiRocks, VoronoiGrains +from infinigen.terrain.elements.warped_rocks import WarpedRocks +from infinigen.terrain.elements.waterbody import Waterbody +from infinigen.terrain.elements.atmosphere import Atmosphere -from terrain.utils import chance -from util.organization import ElementNames, Assets -from util.math import FixedSeed, int_hash +from infinigen.terrain.utils import chance +from infinigen.core.util.organization import ElementNames, Assets +from infinigen.core.util.math import FixedSeed, int_hash @gin.configurable def scene( diff --git a/infinigen/terrain/source/common/surfaces/chunkyrock.h b/infinigen/terrain/source/common/surfaces/chunkyrock.h index ec1708547..b683d7e52 100644 --- a/infinigen/terrain/source/common/surfaces/chunkyrock.h +++ b/infinigen/terrain/source/common/surfaces/chunkyrock.h @@ -1,5 +1,5 @@ -// Code generated using version 1.0.0 of worldgen/tools/kernelize_surfaces.py; -// refer to worldgen/surfaces/templates/chunkyrock.py which has the copyright +// Code generated using version 1.0.0 of infinigen/tools/kernelize_surfaces.py; +// refer to infinigen/assets/materials/chunkyrock.py which has the copyright // and authors DEVICE_FUNC void geo_rocks(float3_nonbuiltin position, float3_nonbuiltin normal, diff --git a/infinigen/terrain/source/common/surfaces/cobble_stone.h b/infinigen/terrain/source/common/surfaces/cobble_stone.h index 9126cfbcc..3c4ddbb2e 100644 --- a/infinigen/terrain/source/common/surfaces/cobble_stone.h +++ b/infinigen/terrain/source/common/surfaces/cobble_stone.h @@ -1,5 +1,5 @@ -// Code generated using version 1.0.0 of worldgen/tools/kernelize_surfaces.py; -// refer to worldgen/surfaces/templates/cobble_stone.py which has the copyright +// Code generated using version 1.0.0 of infinigen/tools/kernelize_surfaces.py; +// refer to infinigen/assets/materials/cobble_stone.py which has the copyright // and authors DEVICE_FUNC void geo_cobblestone( float3_nonbuiltin position, float3_nonbuiltin normal, diff --git a/infinigen/terrain/source/common/surfaces/cracked_ground.h b/infinigen/terrain/source/common/surfaces/cracked_ground.h index 40d1f4897..a8c0e480b 100644 --- a/infinigen/terrain/source/common/surfaces/cracked_ground.h +++ b/infinigen/terrain/source/common/surfaces/cracked_ground.h @@ -1,5 +1,5 @@ -// Code generated using version 1.0.0 of worldgen/tools/kernelize_surfaces.py; -// refer to worldgen/surfaces/templates/cracked_ground.py which has the +// Code generated using version 1.0.0 of infinigen/tools/kernelize_surfaces.py; +// refer to infinigen/assets/materials/cracked_ground.py which has the // copyright and authors DEVICE_FUNC void nodegroup_apply_value_to_normal( float Input_0, float Input_1, float3_nonbuiltin normal, diff --git a/infinigen/terrain/source/common/surfaces/dirt.h b/infinigen/terrain/source/common/surfaces/dirt.h index d36f6452a..b131b10d5 100644 --- a/infinigen/terrain/source/common/surfaces/dirt.h +++ b/infinigen/terrain/source/common/surfaces/dirt.h @@ -1,5 +1,5 @@ -// Code generated using version 1.0.0 of worldgen/tools/kernelize_surfaces.py; -// refer to worldgen/surfaces/templates/dirt.py which has the copyright and +// Code generated using version 1.0.0 of infinigen/tools/kernelize_surfaces.py; +// refer to infinigen/assets/materials/dirt.py which has the copyright and // authors DEVICE_FUNC void geo_dirt(float3_nonbuiltin position, float3_nonbuiltin normal, diff --git a/infinigen/terrain/source/common/surfaces/ice.h b/infinigen/terrain/source/common/surfaces/ice.h index 2bc611e2e..db15e9698 100644 --- a/infinigen/terrain/source/common/surfaces/ice.h +++ b/infinigen/terrain/source/common/surfaces/ice.h @@ -1,5 +1,5 @@ -// Code generated using version 1.0.0 of worldgen/tools/kernelize_surfaces.py; -// refer to worldgen/surfaces/templates/ice.py which has the copyright and +// Code generated using version 1.0.0 of infinigen/tools/kernelize_surfaces.py; +// refer to infinigen/assets/materials/ice.py which has the copyright and // authors DEVICE_FUNC void geo_ice(float3_nonbuiltin position, float3_nonbuiltin normal, POINTER_OR_REFERENCE_ARG float *float_vars, diff --git a/infinigen/terrain/source/common/surfaces/mountain.h b/infinigen/terrain/source/common/surfaces/mountain.h index 01c5574cf..335d27e01 100644 --- a/infinigen/terrain/source/common/surfaces/mountain.h +++ b/infinigen/terrain/source/common/surfaces/mountain.h @@ -1,5 +1,5 @@ -// Code generated using version 1.0.0 of worldgen/tools/kernelize_surfaces.py; -// refer to worldgen/surfaces/templates/mountain.py which has the copyright and +// Code generated using version 1.0.0 of infinigen/tools/kernelize_surfaces.py; +// refer to infinigen/assets/materials/mountain.py which has the copyright and // authors DEVICE_FUNC void geo_MOUNTAIN(float3_nonbuiltin position, float3_nonbuiltin normal, diff --git a/infinigen/terrain/source/common/surfaces/mud.h b/infinigen/terrain/source/common/surfaces/mud.h index 2cbd47ac0..fa121562b 100644 --- a/infinigen/terrain/source/common/surfaces/mud.h +++ b/infinigen/terrain/source/common/surfaces/mud.h @@ -1,5 +1,5 @@ -// Code generated using version 1.0.0 of worldgen/tools/kernelize_surfaces.py; -// refer to worldgen/surfaces/templates/mud.py which has the copyright and +// Code generated using version 1.0.0 of infinigen/tools/kernelize_surfaces.py; +// refer to infinigen/assets/materials/mud.py which has the copyright and // authors DEVICE_FUNC void geo_mud(float3_nonbuiltin position, float3_nonbuiltin normal, POINTER_OR_REFERENCE_ARG float *float_vars, diff --git a/infinigen/terrain/source/common/surfaces/sand.h b/infinigen/terrain/source/common/surfaces/sand.h index 51570b7b4..d72e8796b 100644 --- a/infinigen/terrain/source/common/surfaces/sand.h +++ b/infinigen/terrain/source/common/surfaces/sand.h @@ -1,5 +1,5 @@ -// Code generated using version 1.0.0 of worldgen/tools/kernelize_surfaces.py; -// refer to worldgen/surfaces/templates/sand.py which has the copyright and +// Code generated using version 1.0.0 of infinigen/tools/kernelize_surfaces.py; +// refer to infinigen/assets/materials/sand.py which has the copyright and // authors DEVICE_FUNC void geo_SAND(float3_nonbuiltin position, float3_nonbuiltin normal, diff --git a/infinigen/terrain/source/common/surfaces/sandstone.h b/infinigen/terrain/source/common/surfaces/sandstone.h index 87a6ce63d..675931b7f 100644 --- a/infinigen/terrain/source/common/surfaces/sandstone.h +++ b/infinigen/terrain/source/common/surfaces/sandstone.h @@ -1,5 +1,5 @@ -// Code generated using version 1.0.0 of worldgen/tools/kernelize_surfaces.py; -// refer to worldgen/surfaces/templates/sandstone.py which has the copyright and +// Code generated using version 1.0.0 of infinigen/tools/kernelize_surfaces.py; +// refer to infinigen/assets/materials/sandstone.py which has the copyright and // authors DEVICE_FUNC void nodegroup_roughness(float Input_0, float Input_1, float Input_2, float Input_3, diff --git a/infinigen/terrain/source/common/surfaces/snow.h b/infinigen/terrain/source/common/surfaces/snow.h index 120b938d3..1f8572280 100644 --- a/infinigen/terrain/source/common/surfaces/snow.h +++ b/infinigen/terrain/source/common/surfaces/snow.h @@ -1,5 +1,5 @@ -// Code generated using version 1.0.0 of worldgen/tools/kernelize_surfaces.py; -// refer to worldgen/surfaces/templates/snow.py which has the copyright and +// Code generated using version 1.0.0 of infinigen/tools/kernelize_surfaces.py; +// refer to infinigen/assets/materials/snow.py which has the copyright and // authors DEVICE_FUNC void geo_snowtexture(float3_nonbuiltin position, float3_nonbuiltin normal, diff --git a/infinigen/terrain/source/common/surfaces/soil.h b/infinigen/terrain/source/common/surfaces/soil.h index 03eb359b0..a62af64bd 100644 --- a/infinigen/terrain/source/common/surfaces/soil.h +++ b/infinigen/terrain/source/common/surfaces/soil.h @@ -1,5 +1,5 @@ -// Code generated using version 1.0.0 of worldgen/tools/kernelize_surfaces.py; -// refer to worldgen/surfaces/templates/soil.py which has the copyright and +// Code generated using version 1.0.0 of infinigen/tools/kernelize_surfaces.py; +// refer to infinigen/assets/materials/soil.py which has the copyright and // authors DEVICE_FUNC void nodegroup_pebble( float Input_0, float Input_1, diff --git a/infinigen/terrain/source/common/surfaces/stone.h b/infinigen/terrain/source/common/surfaces/stone.h index 5608ef555..270679a7e 100644 --- a/infinigen/terrain/source/common/surfaces/stone.h +++ b/infinigen/terrain/source/common/surfaces/stone.h @@ -1,5 +1,5 @@ -// Code generated using version 1.0.0 of worldgen/tools/kernelize_surfaces.py; -// refer to worldgen/surfaces/templates/stone.py which has the copyright and +// Code generated using version 1.0.0 of infinigen/tools/kernelize_surfaces.py; +// refer to infinigen/assets/materials/stone.py which has the copyright and // authors DEVICE_FUNC void geo_stone(float3_nonbuiltin position, float3_nonbuiltin normal, diff --git a/infinigen/terrain/surface_kernel/core.py b/infinigen/terrain/surface_kernel/core.py index bc7df92ac..0c5fa028f 100644 --- a/infinigen/terrain/surface_kernel/core.py +++ b/infinigen/terrain/surface_kernel/core.py @@ -9,7 +9,7 @@ import numpy as np from numpy import ascontiguousarray as AC -from terrain.utils import KernelDataType, Vars, load_cdll, register_func, ASFLOAT, ASINT, KERNELDATATYPE_DIMS, KERNELDATATYPE_NPTYPE, Mesh +from infinigen.terrain.utils import KernelDataType, Vars, load_cdll, register_func, ASFLOAT, ASINT, KERNELDATATYPE_DIMS, KERNELDATATYPE_NPTYPE, Mesh from .kernelizer import Kernelizer diff --git a/infinigen/terrain/surface_kernel/kernelizer.py b/infinigen/terrain/surface_kernel/kernelizer.py index cb222927a..66d3eb100 100644 --- a/infinigen/terrain/surface_kernel/kernelizer.py +++ b/infinigen/terrain/surface_kernel/kernelizer.py @@ -9,7 +9,7 @@ from collections import OrderedDict import numpy as np -from terrain.utils import SocketType, Vars, KernelDataType, usable_name, Nodes, NODE_ATTRS_AVAILABLE, SOCKETTYPE_KERNEL, \ +from infinigen.terrain.utils import SocketType, Vars, KernelDataType, usable_name, Nodes, NODE_ATTRS_AVAILABLE, SOCKETTYPE_KERNEL, \ sanitize, special_sanitize, special_sanitize_float_curve, concat_string, value_string, var_list, NODE_FUNCTIONS, \ collecting_vars, get_imp_var_name, special_sanitize_constant diff --git a/infinigen/terrain/utils/camera.py b/infinigen/terrain/utils/camera.py index a255d134a..ee6fe80a4 100644 --- a/infinigen/terrain/utils/camera.py +++ b/infinigen/terrain/utils/camera.py @@ -7,7 +7,7 @@ import bpy import gin import numpy as np -from placement.camera import get_camera +from infinigen.core.placement.camera import get_camera from scipy.spatial.transform import Rotation as R diff --git a/infinigen/terrain/utils/ctype_util.py b/infinigen/terrain/utils/ctype_util.py index 71862a717..1abb8db15 100644 --- a/infinigen/terrain/utils/ctype_util.py +++ b/infinigen/terrain/utils/ctype_util.py @@ -25,4 +25,5 @@ def register_func(me, dll, name, argtypes=[], restype=None, caller_name=None): func.restype = restype def load_cdll(path): - return CDLL(Path(sys.path[-1]) / path, mode=RTLD_LOCAL) \ No newline at end of file + root = Path(__file__).parent.parent.parent + return CDLL(root/path, mode=RTLD_LOCAL) diff --git a/infinigen/terrain/utils/kernelizer_util.py b/infinigen/terrain/utils/kernelizer_util.py index 929f8a9e9..46bad9207 100644 --- a/infinigen/terrain/utils/kernelizer_util.py +++ b/infinigen/terrain/utils/kernelizer_util.py @@ -5,9 +5,9 @@ import numpy as np -from nodes.node_info import Nodes as oNodes -from nodes.node_info import NODE_ATTRS_AVAILABLE as o_NODE_ATTRS_AVAILABLE -from surfaces.surface import Registry +from infinigen.core.nodes.node_info import Nodes as oNodes +from infinigen.core.nodes.node_info import NODE_ATTRS_AVAILABLE as o_NODE_ATTRS_AVAILABLE +from infinigen.core.surface import Registry class Vars: Position = "position" diff --git a/infinigen/terrain/utils/logging.py b/infinigen/terrain/utils/logging.py index 98ff3ca4d..f8f44f674 100644 --- a/infinigen/terrain/utils/logging.py +++ b/infinigen/terrain/utils/logging.py @@ -7,7 +7,7 @@ import psutil import os import gin -from util.logging import Timer as oTimer +from infinigen.core.util.logging import Timer as oTimer def report_memory(): diff --git a/infinigen/terrain/utils/mesh.py b/infinigen/terrain/utils/mesh.py index 170df196f..2e435262f 100644 --- a/infinigen/terrain/utils/mesh.py +++ b/infinigen/terrain/utils/mesh.py @@ -11,9 +11,9 @@ import numpy as np import trimesh from numpy import ascontiguousarray as AC -from util import blender as butil -from util.logging import Timer -from util.organization import Attributes +from infinigen.core.util import blender as butil +from infinigen.core.util.logging import Timer +from infinigen.core.util.organization import Attributes from .camera import getK from .ctype_util import ASDOUBLE, ASINT, load_cdll, register_func diff --git a/infinigen/tools/blendscript_import_infinigen.py b/infinigen/tools/blendscript_import_infinigen.py new file mode 100644 index 000000000..b84c01952 --- /dev/null +++ b/infinigen/tools/blendscript_import_infinigen.py @@ -0,0 +1,25 @@ + + +''' +Copy this file into blender's scripting window and run it whenever you open a new blender instance. + +It will configure the sys.path and load gin. This is necessary before any other procgen files can be imported/used within blender. + +Once this is done, you can do things like `from infinigen.assets.creatures.util.genomes.carnivore import CarnivoreFactory` then `CarnivoreFactory(0).spawn_asset(0)` directly in the blender commandline +''' + +import bpy +from pathlib import Path +import sys, os + +pwd = os.getcwd() +sys.path.append(pwd) + +import examples.generate_nature # so gin can find all its targets +import gin +gin.clear_config() +gin.enter_interactive_mode() + +gin.parse_config_files_and_bindings(['config/base.gin'], []) +from infinigen.core.surface import registry +registry.initialize_from_gin() \ No newline at end of file diff --git a/infinigen/tools/install/compile_flip_fluids.sh b/infinigen/tools/install/compile_flip_fluids.sh index 114c1351f..107c1d43c 100644 --- a/infinigen/tools/install/compile_flip_fluids.sh +++ b/infinigen/tools/install/compile_flip_fluids.sh @@ -23,5 +23,5 @@ if [ ! -d "${FLIP_FLUIDS_ADDON_FOLDER}" ]; then python build.py cd - cp -r "${FLIP_FLUIDS_ADDON_FOLDER}" "${BLENDER_ADDONS}" - "${BLENDER_EXE}" --background -noaudio -P ./worldgen/fluid/flip_init.py + "${BLENDER_EXE}" --background -noaudio -P ./infinigen/assets/fluid/flip_init.py fi \ No newline at end of file diff --git a/infinigen/tools/install/compile_opengl.sh b/infinigen/tools/install/compile_opengl.sh index 02d60f1c2..a26aef250 100644 --- a/infinigen/tools/install/compile_opengl.sh +++ b/infinigen/tools/install/compile_opengl.sh @@ -1,9 +1,9 @@ #!/bin/bash -# Compile process_mesh (i.e. OpenGL-based ground truth) -cd ./process_mesh + +cd ./infinigen/datagen/customgt cmake -S . -Bbuild -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_BUILD_TYPE=Release cmake --build build --target all -./build/process_mesh -in x -out x --height 100 --width 10 --frame 0 +./build/customgt -in x -out x --height 100 --width 10 --frame 0 if [ $? -eq 174 ]; then echo "OpenGL/EGL ground truth is working." else diff --git a/infinigen/tools/submit_asset_cache.py b/infinigen/tools/submit_asset_cache.py new file mode 100644 index 000000000..a08a753cb --- /dev/null +++ b/infinigen/tools/submit_asset_cache.py @@ -0,0 +1,58 @@ +# Copyright (c) Princeton University. +# This source code is licensed under the BSD 3-clause license found in the LICENSE file in the root directory of this source tree. + +# Authors: Karhan Kayan + +import submitit +import argparse +from pathlib import Path +import sys +import os +import time + +sys.path.append(str(Path(os.path.split(os.path.abspath(__file__))[0]) / "..")) + + +def get_slurm_banned_nodes(config_path=None): + if config_path is None: + return [] + with Path(config_path).open('r') as f: + return list(f.read().split()) + + +parser = argparse.ArgumentParser() +parser.add_argument('-b', '--blender_path', type=str) +parser.add_argument('-f', '--asset_folder', type=str) +parser.add_argument('-a', '--assets', nargs='+', default=[ + 'CachedBushFactory', + 'CachedTreeFactory', + 'CachedCactusFactory', + 'CachedCreatureFactory', + 'CachedBoulderFactory' +]) +parser.add_argument('-n', '--number', type=int, default=1) +parser.add_argument('-s', '--start_frame', type=int, default=-20) +parser.add_argument('-d', '--simulation_duration', type=int, default=24*20+20) +# parser.add_argument('-r', '--resolution', type=int) +# parser.add_argument('--dissolve_speed', type=int, default=25) +# parser.add_argument('--dom_scale', type=int, default=1) +args = parser.parse_args() + +Path(args.asset_folder).mkdir(parents=True, exist_ok=True) + + +for asset in args.assets: + for i in range(args.number): + cmd = f"{args.blender_path} --background -noaudio --python fluid/run_asset_cache.py -- -f {args.asset_folder}/ -a {asset} -s {args.start_frame} -d {args.simulation_duration}".split(" ") + print(cmd) + executor = submitit.AutoExecutor(folder=str(Path(args.asset_folder) / "logs")) + executor.update_parameters( + mem_gb=16, + name=f"{asset}_{i}", + cpus_per_task=4, + timeout_min=60*24, + slurm_account="pvl", + slurm_exclude= "node408,node409", + ) + render_fn = submitit.helpers.CommandFunction(cmd) + executor.submit(render_fn) diff --git a/infinigen/tools/terrain/generate_terrain_assets.py b/infinigen/tools/terrain/generate_terrain_assets.py new file mode 100644 index 000000000..14649540b --- /dev/null +++ b/infinigen/tools/terrain/generate_terrain_assets.py @@ -0,0 +1,83 @@ +# Copyright (c) Princeton University. +# This source code is licensed under the BSD 3-Clause license found in the LICENSE file in the root directory of this source tree. + +# Authors: Zeyu Ma + + +''' +fileheader placeholder +''' + +import os +import sys +import argparse +from pathlib import Path + +sys.path.append(os.getcwd()) + +import bpy +from infinigen.terrain.assets.caves import caves_asset +from infinigen.terrain.assets.landtiles import landtile_asset +from infinigen.terrain.assets.upsidedown_mountains import upsidedown_mountains_asset +from infinigen.core.util import blender as butil +from infinigen.core.util.math import int_hash, FixedSeed +from infinigen.core.util.organization import Assets, LandTile, AssetFile + + +def asset_generation( + output_folder, + assets, + instance_ids, + seed, + device, + check_only=False, +): + for i in instance_ids: + for asset in assets: + if asset in [LandTile.Mesa, LandTile.Canyon, LandTile.Canyons, LandTile.Cliff, LandTile.Mountain, LandTile.River, LandTile.Volcano, LandTile.MultiMountains, LandTile.Coast]: + if not (output_folder/asset/f"{i}"/AssetFile.Finish).exists(): + print(asset, i) + if not check_only: + with FixedSeed(int_hash([asset, seed, i])): + landtile_asset(output_folder/asset/f"{i}", asset, device=device) + if asset == Assets.UpsidedownMountains: + if not (output_folder/asset/f"{i}"/AssetFile.Finish).exists(): + print(asset, i) + if not check_only: + with FixedSeed(int_hash([asset, seed, i])): + upsidedown_mountains_asset(output_folder/Assets.UpsidedownMountains/f"{i}", device=device) + if asset == Assets.Caves: + if not (output_folder/asset/f"{i}"/AssetFile.Finish).exists(): + print(asset, i) + if not check_only: + with FixedSeed(int_hash([asset, seed, i])): + caves_asset(output_folder/Assets.Caves/f"{i}") + + +if __name__ == "__main__": + # by default infinigen does on-the-fly terrain asset generation, but if you want to pre-generate a pool of assets, run this code + parser = argparse.ArgumentParser() + parser.add_argument('-a', '--assets', nargs='+', default=[ + LandTile.MultiMountains, + LandTile.Coast, + LandTile.Mesa, + LandTile.Canyon, + LandTile.Canyons, + LandTile.Cliff, + LandTile.Mountain, + LandTile.River, + LandTile.Volcano, + Assets.UpsidedownMountains, + Assets.Caves, + ]) + parser.add_argument('-s', '--start', type=int, default=0) + parser.add_argument('-e', '--end', type=int, default=1) + parser.add_argument('-f', '--folder') + parser.add_argument('--seed', type=int, default=0) + parser.add_argument('--check_only', type=int, default=0) + parser.add_argument('--device', type=str, default="cpu") + args = parser.parse_args(sys.argv[sys.argv.index("--") + 1:]) + bpy.ops.preferences.addon_enable(module='add_mesh_extra_objects') + bpy.ops.preferences.addon_enable(module='ant_landscape') + butil.clear_scene(targets=[bpy.data.objects]) + asset_generation(Path(args.folder), args.assets, list(range(args.start, args.end)), args.seed, args.device, check_only=args.check_only) diff --git a/infinigen/tools/kernelize_surfaces.py b/infinigen/tools/terrain/kernelize_surfaces.py similarity index 73% rename from infinigen/tools/kernelize_surfaces.py rename to infinigen/tools/terrain/kernelize_surfaces.py index bd10cc909..d1da7a648 100644 --- a/infinigen/tools/kernelize_surfaces.py +++ b/infinigen/tools/terrain/kernelize_surfaces.py @@ -12,10 +12,10 @@ from pathlib import Path import bpy -from core import VERSION -from surfaces.templates import chunkyrock, cobble_stone, cracked_ground, dirt, ice, mountain, mud, sand, sandstone, snow, soil, stone -from terrain.surface_kernel.kernelizer import Kernelizer -from util.blender import clear_scene +from infinigen.core import VERSION +from infinigen.assets.materials import chunkyrock, cobble_stone, cracked_ground, dirt, ice, mountain, mud, sand, sandstone, snow, soil, stone +from infinigen.terrain.surface_kernel.kernelizer import Kernelizer +from infinigen.core.util.blender import clear_scene if __name__ == "__main__": parser = Kernelizer() @@ -29,7 +29,7 @@ folder.mkdir(exist_ok=1) dst = folder/f"{surface.name}.h" with open(dst, "w") as f: - f.write(f'''// Code generated using version {VERSION} of worldgen/tools/kernelize_surfaces.py; refer to worldgen/surfaces/templates/{surface.name}.py which has the copyright and authors''') + f.write(f'''// Code generated using version {VERSION} of infinigen/tools/kernelize_surfaces.py; refer to infinigen/assets/materials/{surface.name}.py which has the copyright and authors''') f.write(code) f.write("\n") # optional: clang-format needed to format output code diff --git a/infinigen/tools/terrain/landtile_viewer.py b/infinigen/tools/terrain/landtile_viewer.py new file mode 100644 index 000000000..79bca13a9 --- /dev/null +++ b/infinigen/tools/terrain/landtile_viewer.py @@ -0,0 +1,40 @@ +# Copyright (c) Princeton University. +# This source code is licensed under the BSD 3-Clause license found in the LICENSE file in the root directory of this source tree. + +# Authors: Zeyu Ma + + +import os +import sys + +#sys.path.append(f"{os.path.split(os.path.abspath(__file__))[0]}/../..") +import argparse + +import bpy +import numpy as np +from infinigen.core.nodes.node_wrangler import Nodes, NodeWrangler +from infinigen.terrain.utils import Mesh, read +from infinigen.core.util.blender import clear_scene +from infinigen.core.util.organization import AssetFile + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument('-i', '--input', type=str) + parser.add_argument('-o', '--overlay', type=int, default=False) + args = parser.parse_args(sys.argv[sys.argv.index("--") + 1:]) + folder = os.path.dirname(args.input) + tile_size = float(np.loadtxt(f"{folder}/{AssetFile.TileSize}.txt")) + image = read(args.input) + mesh = Mesh(heightmap=image, L=tile_size) + if args.overlay: + image = read(args.input.replace(AssetFile.Heightmap, AssetFile.Mask)) + mesh.vertex_attributes["attribute"] = image.reshape(-1).astype(np.float32) + clear_scene() + obj = mesh.export_blender("preview") + if args.overlay: + material = bpy.data.materials.new(name="preview_material") + material.use_nodes = True + nw = NodeWrangler(material.node_tree) + new_attribute_node = nw.new_node(Nodes.Attribute, [], {"attribute_name": "attribute"}) + material.node_tree.links.new(new_attribute_node.outputs['Color'], material.node_tree.nodes['Principled BSDF'].inputs['Base Color']) + obj.active_material = material diff --git a/infinigen/tools/terrain/palette/.gitignore b/infinigen/tools/terrain/palette/.gitignore new file mode 100644 index 000000000..c1eaafafe --- /dev/null +++ b/infinigen/tools/terrain/palette/.gitignore @@ -0,0 +1,3 @@ +images +css +json \ No newline at end of file diff --git a/infinigen/tools/terrain/palette/demo1.png b/infinigen/tools/terrain/palette/demo1.png new file mode 100644 index 000000000..640f96627 Binary files /dev/null and b/infinigen/tools/terrain/palette/demo1.png differ diff --git a/infinigen/tools/terrain/palette/demo2.png b/infinigen/tools/terrain/palette/demo2.png new file mode 100644 index 000000000..f819fcf43 Binary files /dev/null and b/infinigen/tools/terrain/palette/demo2.png differ diff --git a/infinigen/tools/terrain/palette/demo3.png b/infinigen/tools/terrain/palette/demo3.png new file mode 100644 index 000000000..ce3f888d8 Binary files /dev/null and b/infinigen/tools/terrain/palette/demo3.png differ diff --git a/infinigen/tools/terrain/palette/demo4.png b/infinigen/tools/terrain/palette/demo4.png new file mode 100644 index 000000000..96938a095 Binary files /dev/null and b/infinigen/tools/terrain/palette/demo4.png differ diff --git a/infinigen/tools/terrain/palette/palette.py b/infinigen/tools/terrain/palette/palette.py new file mode 100644 index 000000000..a87532f6a --- /dev/null +++ b/infinigen/tools/terrain/palette/palette.py @@ -0,0 +1,117 @@ +# Copyright (c) Princeton University. +# This source code is licensed under the BSD 3-Clause license found in the LICENSE file in the root directory of this source tree. + +# Authors: Zeyu Ma, Lingjie Mei + + +from google_images_search import GoogleImagesSearch +from sklearn.mixture import GaussianMixture +import argparse +import numpy as np +import os +import cv2 +import matplotlib.pyplot as plt +import colorsys +from pathlib import Path + + +def make_palette(keyword, num_images, num_colors, overwrite=False): + # define search params + # option for commonly used search param are shown below for easy reference. + # For param marked with '##': + # - Multiselect is currently not feasible. Choose ONE option only + # - This param can also be omitted from _search_params if you do not wish to define any value + _search_params = { + 'q': keyword, + 'num': num_images, + 'fileType': 'jpg|png', + } + + # this will search and download: + folder = f'{os.path.split(os.path.abspath(__file__))[0]}/images/{keyword}' + if os.path.exists(folder) and not overwrite: + print("folder existing, skip") + else: + # set your environment variables: GCS_DEVELOPER_KEY, GCS_CX + gis = GoogleImagesSearch(os.environ["GCS_DEVELOPER_KEY"], os.environ["GCS_CX"]) + gis.search(search_params=_search_params, path_to_dir=folder) + + colors = np.zeros((0, 3)) + for image_name in os.listdir(folder): + if image_name.endswith("svg"): continue + image = cv2.imread(f"{folder}/{image_name}") + image = cv2.resize(image, (128, 128)) + image = image[:, :, :3] + colors = np.concatenate((colors, image.reshape((-1, 3)))) + colors = colors[:, ::-1] / 255 + + for i in range(len(colors)): + colors[i] = colorsys.rgb_to_hsv(*colors[i]) + + model = GaussianMixture(num_colors, random_state=0).fit(colors) + + weights = model.weights_.copy() + index = np.argsort(weights)[::-1] + weights = weights[index] + colors_hsv = model.means_.copy()[index] + cov = model.covariances_.copy()[index] + colors_rgb = colors_hsv.copy() + for i in range(num_colors): + colors_rgb[i] = colorsys.hsv_to_rgb(*colors_rgb[i]) + cov[i] = np.linalg.cholesky(cov[i] + 1e-5 * np.eye(3)) + + S = 20 + diagrams = np.zeros((2, S, num_colors, S, 3)) + x, y = np.meshgrid(np.linspace(-1, 1, S), np.linspace(-1, 1, S), indexing="ij") + for i in range(num_colors): + diagrams[0, :, i, :, 0] = colors_rgb[i, 0] + diagrams[0, :, i, :, 1] = colors_rgb[i, 1] + diagrams[0, :, i, :, 2] = colors_rgb[i, 2] + diagrams[1, :, i, :, 0] = colors_hsv[i, 0] + cov[i, 0, 0] * x + cov[i, 0, 1] * y + diagrams[1, :, i, :, 1] = colors_hsv[i, 1] + cov[i, 1, 0] * x + cov[i, 1, 1] * y + diagrams[1, :, i, :, 2] = colors_hsv[i, 2] + cov[i, 2, 0] * x + cov[i, 2, 1] * y + for j in range(S): + for k in range(S): + diagrams[1, j, i, k] = colorsys.hsv_to_rgb(*diagrams[1, j, i, k]) + + diagrams = np.clip(diagrams * 256, a_min=0, a_max=255).astype(np.int32) + diagrams = diagrams.reshape((2 * S, num_colors * S, 3)) + + Path(f'{os.path.split(os.path.abspath(__file__))[0]}/images').mkdir(parents=True, exist_ok=True) + Path(f'{os.path.split(os.path.abspath(__file__))[0]}/json').mkdir(parents=True, exist_ok=True) + + plt.figure(figsize=(20, 5)) + plt.imshow(diagrams) + plt.savefig(f'{os.path.split(os.path.abspath(__file__))[0]}/images/{keyword}.png') + + colors_rgb = np.clip(colors_rgb * 256, a_min=0, a_max=255).astype(np.int32) + with open(f"{os.path.split(os.path.abspath(__file__))[0]}/json/{keyword}.json", "w") as f: + f.write("{\n") + f.write(' "color": {\n') + for i, color in enumerate(colors_rgb): + f.write(f' "{i}": "#{color[0]:02X}{color[1]:02X}{color[2]:02X}",\n') + f.write(" },\n") + f.write(' "hsv": [\n') + for color_hsv in colors_hsv: + f.write(f' [{color_hsv[0]}, {color_hsv[1]}, {color_hsv[2]}],\n') + f.write(" ],\n") + f.write(' "std": [\n') + for std in cov: + covs = ','.join([str(x) for x in std.reshape(-1)]) + f.write(f' [{covs}],\n') + f.write(" ],\n") + f.write(' "prob": [\n') + for i in range(num_colors): + f.write(f' {weights[i]},\n') + f.write(" ]\n") + f.write("}\n") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument('-k', '--keyword', type=str) + parser.add_argument('-i', '--num_images', default=10) + parser.add_argument('-c', '--num_colors', default=10) + parser.add_argument('-o', '--overwrite', action='store_true') + args = parser.parse_args() + make_palette(args.keyword, args.num_images, args.num_colors, args.overwrite) diff --git a/infinigen/tools/terrain/palette/readme.md b/infinigen/tools/terrain/palette/readme.md new file mode 100644 index 000000000..b8c2738e5 --- /dev/null +++ b/infinigen/tools/terrain/palette/readme.md @@ -0,0 +1,47 @@ +# How to use + +This palette generating tool is enabled using `GoogleImagesSearch` (currently using Zeyu's API key). Also you need `json5`. + +## Step 1 + +``` +cd infinigen/tools/terrain/palette/ +# you can change "mountain rock" to other key words +python palette.py -k "mountain rock" +``` + +This downloads 10 images from Google by default: +![](demo1.png) + +and runs Mixed Gaussian Model (MGM) on HSV space to get an initial palette: +![](demo2.png) + +You can see the above palette in folder `images`. By default it has 10 centers, and the first row is the color of all centers, and the second row is the range of color when you vary it according to MGM with range (-std, std) (V dimension is ommited for 2D display) + +Some colors are background colors and do not belong to the keyword you search. + +## Step 2 + +Under folder `json`, there is a `mountain rock.json`. By installing Add-on `Flutter Color` and `JSON5 syntax` in VSCode, you can see the color icon. + +![](demo3.png) + +After manually comemnt out them, you have: + +![](demo4.png) + +Then you move the ready palatte to location: `infinigen/examples/configs/palette` + +## Step 3 + +When you want some color to sample from it, use the `palette` keyword in parameter parsing, e.g.: + +``` +assets.materials.water.shader.color = ("palette", "water") +assets.materials.ocean.shader.color = ("palette", "water") +assets.materials.mountain.shader.color = ("palette", "mountain rock") +assets.materials.sand.shader.color = ("palette", "desert") +assets.materials.sandstone.shader.color = ("palette", "sandstone") +``` + +Note that Blender uses lienar RGB while web content uses sRGB, so a conversion is done in the parsing function `random_general` \ No newline at end of file diff --git a/infinigen/tools/terrain/params_parser.py b/infinigen/tools/terrain/params_parser.py new file mode 100644 index 000000000..682986181 --- /dev/null +++ b/infinigen/tools/terrain/params_parser.py @@ -0,0 +1,49 @@ +# Copyright (c) Princeton University. +# This source code is licensed under the BSD 3-Clause license found in the LICENSE file in the root directory of this source tree. + +# Authors: Zeyu Ma + + +import argparse + +parser = argparse.ArgumentParser() +parser.add_argument('-f', '--file_path', type=str) +args = parser.parse_args() + +output = "" +current_type = "" +current_vars = [] + +code = "" + +def get_code(current_type, variables): + code = "" + for i, v in enumerate(variables): + code += f" {current_type} {v} = {current_type[0]}_params[{i}];\n" + return code + +with open(args.file_path, "r") as f: + lines = f.readlines() + i = 0 + while i < len(lines): + line = lines[i] + if line.lstrip().startswith("/* params"): + while True: + i += 1 + if lines[i].rstrip().endswith(":"): + if current_type != "": + code += get_code(current_type, current_vars) + if lines[i].lstrip().startswith("int"): + current_type = "int" + current_vars = [] + elif lines[i].lstrip().startswith("float"): + current_type = "float" + current_vars = [] + elif lines[i].rstrip().endswith("*/"): + code += get_code(current_type, current_vars) + break + else: + current_vars.extend([x.lstrip().rstrip() for x in lines[i].lstrip().rstrip().rstrip(',').split(",") if x.lstrip().rstrip() != ""]) + i += 1 + +print(code) diff --git a/install.sh b/install.sh index 3a4a174e5..6ffca5dba 100755 --- a/install.sh +++ b/install.sh @@ -34,39 +34,25 @@ cd - # Build terrain rm -rf *.egg-info rm -rf __pycache__ -rm -rf ./worldgen/terrain/build +rm -rf ./infinigen/terrain/build -cd ./worldgen/terrain +cd ./infinigen/terrain bash install_terrain.sh python setup.py build_ext --inplace --force cd - -# Compile process_mesh (i.e. OpenGL-based ground truth) -<<<<<<< HEAD -cd ./process_mesh -/usr/bin/cmake -S . -Bbuild -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_BUILD_TYPE=Release -/usr/bin/cmake --build build --target all -./build/process_mesh -in x -out x --height 100 --width 10 -if [ $? -eq 174 ]; then - echo "OpenGL/EGL ground truth is working." -else - echo "WARNING: OpenGL/EGL is not supported on this machine. If you are running from a cluster head-node, this is likely not an issue." -fi -cd - -<<<<<<< HEAD - # Build NURBS -cd ./worldgen/assets/creatures/geometry/cpp_utils +cd ./infinigen/assets/creatures/geometry/cpp_utils rm -f *.so rm -rf build "../../../../../${BLENDER_PYTHON}" "${NURBS_SCRIPT}" build_ext --inplace cd - if [ "$1" = "opengl" ]; then - bash ./worldgen/tools/install/compile_opengl.sh + bash ./infinigen/tools/install/compile_opengl.sh fi # Build Flip Fluids addon if [ "$1" = "flip_fluids" ] || [ "$2" = "flip_fluids" ]; then - bash ./worldgen/tools/install/compile_flip_fluids.sh + bash ./infinigen/tools/install/compile_flip_fluids.sh fi \ No newline at end of file diff --git a/setup.py b/setup.py new file mode 100644 index 000000000..596a92288 --- /dev/null +++ b/setup.py @@ -0,0 +1,51 @@ +from pathlib import Path +import subprocess + +from setuptools import setup, Extension + +import numpy +from Cython.Build import cythonize + +cwd = Path(__file__).parent + +def get_submodule_folders(): + # Inspired by https://github.com/pytorch/pytorch/blob/main/setup.py + with (cwd/'.gitmodules').open() as f: + return [ + cwd/line.split("=", 1)[1].strip() + for line in f.readlines() + if line.strip().startswith("path") + ] + +def ensure_submodules(): + # Inspired by https://github.com/pytorch/pytorch/blob/main/setup.py + + folders = get_submodule_folders() + + isempty = lambda p: not any(p.iterdir()) + if any(not p.exists() or isempty(p) for p in folders): + subprocess.check_call( + ["git", "submodule", "update", "--init", "--recursive"], cwd=cwd + ) + +ensure_submodules() # not actually needed for this version of setup.py, but will be in future + +cython_extensions = [ + Extension( + name="bnurbs", + sources=["infinigen/assets/creatures/util/geometry/cpp_utils/bnurbs.pyx"], + include_dirs=[numpy.get_include()] + ), + Extension( + name="infinigen.terrain.marching_cubes", + sources=["infinigen/terrain/marching_cubes/_marching_cubes_lewiner_cy.pyx"], + include_dirs=[numpy.get_include()] + ), +] + +setup( + ext_modules=[ + *cythonize(cython_extensions) + ] + # other opts come from setup.cfg +) \ No newline at end of file