Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RuntimeError: Global alloc not supported yet #844

Open
HiromichiKamata opened this issue Nov 15, 2024 · 1 comment
Open

RuntimeError: Global alloc not supported yet #844

HiromichiKamata opened this issue Nov 15, 2024 · 1 comment
Assignees

Comments

@HiromichiKamata
Copy link

When I set the camera axis as y up, I encountered the error of "RuntimeError: Global alloc not supported yet".
Below is the reproduction code.
Strangely, when I set up = torch.tensor([0, 0, 1]) or up = torch.tensor([1, 0, 0]), that error did not occur.

import torch
import kaolin as kal
from kaolin.render.camera import Camera
from kaolin.render.easy_render import render_mesh, default_lighting
from PIL import Image
import math

# デバイスの設定(CUDAが利用可能な場合はGPUを使用)
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

# GLBファイルのパス
model_path = 'sample.glb'

# メッシュの読み込み
mesh = kal.io.gltf.import_mesh(model_path)
mesh = mesh.to(device)

# カメラの設定関数
def create_camera(elev, azim, width=1024, height=1024):
    # カメラ位置の計算
    radius = 3.0  # カメラとモデルの距離
    azim_rad = math.radians(azim)
    elev_rad = math.radians(elev)
    eye = torch.tensor([
        radius * math.cos(elev_rad) * math.sin(azim_rad),
        radius * math.cos(elev_rad) * math.cos(azim_rad),
        radius * math.sin(elev_rad)
    ], device=device)
    at = torch.tensor([0.0, 0.0, 0.0], device=device)
    up = torch.tensor([0.0, 1, 0])  # デバイス指定なしでY軸を上方向とする

    # カメラの生成
    camera = Camera.from_args(
        eye=eye,
        at=at,
        up=up,  # `up` ベクトルはデバイス指定なしで渡す
        fov=45.0 * math.pi / 180.0,  # ラジアンに変換
        width=width,
        height=height,
        near=0.1,
        far=10.0,
        dtype=torch.float32,
        device=device
    )
    return camera

# カメラ位置の設定
camera_azims = [-180, -135, -90, -45, 0, 45, 90, 135]
camera_poses = [(0, azim) for azim in camera_azims]
camera_poses.append((30, 0))   # 上からの視点1
camera_poses.append((30, 180)) # 上からの視点2

# ライティングの設定
lighting = default_lighting()
lighting = lighting.to(device)

# 全カメラ位置からレンダリング
for idx, (elev, azim) in enumerate(camera_poses):
    # 高解像度のカメラを生成
    camera = create_camera(elev, azim, width=1024, height=1024)

    # メッシュのレンダリング
    render_dict = render_mesh(
        camera=camera,
        mesh=mesh,
        lighting=lighting
    )

    # レンダリング結果の取得
    rendered_image = render_dict['render'].clamp(0,1)
    image = rendered_image[0].cpu().numpy()
    image = (image * 255).astype('uint8')
    image = Image.fromarray(image)

    # 画像を保存
    output_path = f'rendered_knight_view_{idx}.png'
    image.save(output_path)
    print(f'カメラ位置 {idx} (elev={elev}, azim={azim}) のレンダリングを {output_path} に保存しました。')

print('すべてのレンダリングが完了しました。')

The error is below

Traceback (most recent call last):
  File "/home/kamata/SyncTweedie/data/knight/sample_kaolin.py", line 63, in <module>
    render_dict = render_mesh(
  File "/home/kamata/venv/nvdiffrec/lib/python3.10/site-packages/kaolin/render/easy_render/mesh.py", line 112, in render_mesh
    diffuse_img, specular_img, img = sg_shade(
  File "/home/kamata/venv/nvdiffrec/lib/python3.10/site-packages/kaolin/render/easy_render/mesh.py", line 432, in sg_shade
    specular_effect = kal.render.lighting.sg_warp_specular_term(
  File "/home/kamata/venv/nvdiffrec/lib/python3.10/site-packages/kaolin/render/lighting/sg.py", line 343, in sg_warp_specular_term
    output = unbatched_reduced_sg_inner_product(
  File "/home/kamata/venv/nvdiffrec/lib/python3.10/site-packages/kaolin/render/lighting/sg.py", line 676, in unbatched_reduced_sg_inner_product
    output = unbatched_sg_inner_product(
RuntimeError: Global alloc not supported yet
@Caenorst Caenorst self-assigned this Nov 19, 2024
@Kurokabe
Copy link

Had the same error, was able to make it run with:

with torch.jit.optimized_execution(False):
    with torch.no_grad():
        render = render_mesh(
                camera,
                mesh,
                lighting,
            )

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants