mirror of
https://github.com/nerfstudio-project/nerfstudio.git
synced 2026-11-10 18:17:31 +08:00
* Copy in `viser` communication infrastructure * Update background image * Add build directory to fix viser HTTP server May want to remove these later * Copy in `viser` communication infrastructure * Update background image * Pass dataset vis using viser * initial impl of ViewerParameter * idk what i did but brent and matt know * Suppress eslint typescript warnings * implement ViewerElement base class, then ViewerButton, ViewerSlider, etc * client -> server message setup * multi folder stuff * Stream controls over viser * import * add types to viewer_param.py * Move another message to viser * Update folder color * Use non throttled messages * multiple folders works * Cleanup, more porting * starting impl of control panel in viser * More porting * scenebox to viser * Cleanup * Fix render updates * More cleanup, docs, typing * start control_panel.py * set_hidden logic but not merged in * control_panel replicates behavior of existing control panel (visually), except for setting the list of output options. not yet integrated with viewer_utils.py for logic flow. also implemented set_disabled and set_hidden in javscript/ViewerElement side * Remove some original leva components * add some train util logic, attempt set_value, doesn't work on javascript side fully yet (value updates but not slider visually * bye zmq * missing call to decoder * 'gui_set' works properly, control panel now replicates behavior of original * remove print * Fix status viewer message * More cleanup * support set_options in dropdown * hiding buttons works correctly * fix set_options, switch from cur_value to get_value() * Fix slowdown * output options * colormap logic converted * add handle to cb_hook * fix some lambda bugs * cleanup * Save checkpoint logic readded * Cleanup and minor fixes * snappier ui * Refactoring * Fix state update bugs * Bug fixes * Write less to redux * added comments to reducer code * Render state machine (#1727) * state machine works, but train step throttling not implemented * more step logic, cleanup * remove random try catcH * mutex logic for render * Update lock logic * types and docs * added some state machine logic to help rerenders * merge --------- Co-authored-by: Justin <justin.g.kerr@gmail.com> * Refactor and cleanup * More cleanup and docs * docstring to gui_utils * docstrings, rename viewer_param.py to viewer_elements.py * Fix viewer, remove bridge stuff * Render on connect * Fix lint errors * More eslint fixes * render_freq logic * better rerender logic for crop * More cleanup * Purge * Cleanup * Lint fixes * Fix cache * better parsing logic * Fix infinite test * More cleanup * typo * Update webdocs * Update docs * rerender on custom hooks * add more docs * Use shared utilities in `viser.infra` * rework callback to use elements instead of handles * Fix ESlint errors * change naming of handle to element, add setter for value * cleanup --------- Co-authored-by: Matt Tancik <mattt4001@gmail.com> Co-authored-by: Justin <justin.g.kerr@gmail.com> Co-authored-by: Ethan Weber <eweb0124@gmail.com> Co-authored-by: Matthew Tancik <tancik@berkeley.edu>
79 lines
2.3 KiB
Python
79 lines
2.3 KiB
Python
"""
|
|
Script to texture an existing mesh file.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from pathlib import Path
|
|
from typing import Optional
|
|
|
|
import tyro
|
|
from rich.console import Console
|
|
from typing_extensions import Literal
|
|
|
|
from nerfstudio.exporter import texture_utils
|
|
from nerfstudio.exporter.exporter_utils import get_mesh_from_filename
|
|
from nerfstudio.utils.eval_utils import eval_setup
|
|
|
|
CONSOLE = Console(width=120)
|
|
|
|
|
|
@dataclass
|
|
class TextureMesh:
|
|
"""
|
|
Export a textured mesh with color computed from the NeRF.
|
|
"""
|
|
|
|
load_config: Path
|
|
"""Path to the config YAML file."""
|
|
output_dir: Path
|
|
"""Path to the output directory."""
|
|
input_mesh_filename: Path
|
|
"""Mesh filename to texture."""
|
|
px_per_uv_triangle: int = 4
|
|
"""Number of pixels per UV square."""
|
|
unwrap_method: Literal["xatlas", "custom"] = "xatlas"
|
|
"""The method to use for unwrapping the mesh."""
|
|
num_pixels_per_side: int = 2048
|
|
"""If using xatlas for unwrapping, the pixels per side of the texture image."""
|
|
target_num_faces: Optional[int] = 50000
|
|
"""Target number of faces for the mesh to texture."""
|
|
|
|
def main(self) -> None:
|
|
"""Export textured mesh"""
|
|
# pylint: disable=too-many-statements
|
|
|
|
if not self.output_dir.exists():
|
|
self.output_dir.mkdir(parents=True)
|
|
|
|
# load the Mesh
|
|
mesh = get_mesh_from_filename(str(self.input_mesh_filename), target_num_faces=self.target_num_faces)
|
|
|
|
# load the Pipeline
|
|
_, pipeline, _, _ = eval_setup(self.load_config, test_mode="inference")
|
|
|
|
# texture the mesh with NeRF and export to a mesh.obj file
|
|
# and a material and texture file
|
|
texture_utils.export_textured_mesh(
|
|
mesh=mesh,
|
|
pipeline=pipeline,
|
|
output_dir=self.output_dir,
|
|
px_per_uv_triangle=self.px_per_uv_triangle,
|
|
unwrap_method=self.unwrap_method,
|
|
num_pixels_per_side=self.num_pixels_per_side,
|
|
)
|
|
|
|
|
|
def entrypoint():
|
|
"""Entrypoint for use with pyproject scripts."""
|
|
tyro.extras.set_accent_color("bright_yellow")
|
|
tyro.cli(tyro.conf.FlagConversionOff[TextureMesh]).main()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
entrypoint()
|
|
|
|
# For sphinx docs
|
|
get_parser_fn = lambda: tyro.extras.get_parser(TextureMesh) # noqa
|