⌂ 홈

시각화

원자 구조를 위한 블렌더링 & 프롬프팅

@seokhyun choung|2025년 10월
0

예시: 전기화학 계면

전기화학 계면에서의 전해질 복잡성

전기화학 계면에서의 전해질 복잡성 - 명시적 용매화, PCET, 이온 효과

0.1

예시: 촉매 설계 개념

지지체 곡률과 MNC

지지체 곡률, 고금속 담지량, MNC 비대칭, 메조기공

표면 구조

상세 표면 원자 구조 시각화

0.2

출판물 예시

1

Blender 설정

Atomic Blender 설치 & 기초

1.1

설치 & 사전 준비

1. Atomic Blender 설정

  • Blender 설치
  • Edit > Preferences > Add-ons
  • "Atomic Blender" 검색 후 활성화
  • 준비 완료!

2. 사전 준비물

  • camera_light_250830.blend (템플릿)
  • XYZ 또는 PDB 형식 구조 파일
  • 구조 소스: ASE, Materials Project, CatalysisHub

XYZ 형식

  • 원자만 (결합 없음)
  • 단순 좌표

PDB 형식

  • 원자 + 결합
  • 분자에 더 적합
참고: Nuria Lopez 그룹은 출판물 그림에 Blender를 광범위하게 사용합니다.
1.2

Blender 기초 & 팁

렌더링 엔진

  • Cycles - GPU 최적화
  • Eevee - CPU 최적화
  • 하드웨어에 따라 선택

주요 단축키

  • cmd+a > Make Instance Real (개별 원자)
  • r - 선택 객체 회전
  • g - 선택 객체 이동/잡기
  • 하나의 씬에서 여러 카메라와 광원 사용 가능
  • 배치 렌더링을 위해 스크립팅(상단 메뉴) 사용
  • 템플릿 .blend 파일로 카메라/조명 설정 시간 절약
  • 2

    Blender 스크립팅

    배치 렌더링을 위한 Python 자동화

    2.1

    전체 Blender 배치 렌더링 스크립트

    import bpy from pathlib import Path from math import pi def setup_scene(): """카메라, 조명, 재질 설정 적용""" # 카메라 설정 bpy.data.objects['Camera'].location.x = -0 bpy.data.objects['Camera'].location.y = -25 bpy.data.objects['Camera'].location.z = 13 bpy.data.scenes["Scene"].camera.rotation_mode = 'XYZ' bpy.data.scenes["Scene"].camera.rotation_euler[0] = 65*(pi/180.0) bpy.data.scenes["Scene"].camera.rotation_euler[1] = 0*(pi/180.0) bpy.data.scenes["Scene"].camera.rotation_euler[2] = -5*(pi/180.0) # 조명 설정 bpy.data.objects['Light'].data.type = 'SUN' bpy.data.objects['Light'].data.energy = 2 bpy.data.objects['Light'].location.x = -10 bpy.data.objects['Light'].location.y = -10 bpy.data.objects['Light'].location.z = 20 bpy.data.objects['Light'].rotation_mode = 'XYZ' bpy.data.objects['Light'].rotation_euler[0] = 30*(pi/180.0) bpy.data.objects['Light'].rotation_euler[1] = -30*(pi/180.0) bpy.data.objects['Light'].rotation_euler[2] = 0*(pi/180.0) # 재질 설정 (재질이 존재하는 경우만) if "Nitrogen" in bpy.data.materials: bpy.data.materials["Nitrogen"].node_tree.nodes["Principled BSDF"].inputs[0].default_value = (1, 0.401978, 0.08022, 1) if "Cobalt" in bpy.data.materials: bpy.data.materials["Cobalt"].node_tree.nodes["Principled BSDF"].inputs[0].default_value = (0, 0, 0.428691, 1) if "Molybdenum" in bpy.data.materials: bpy.data.materials["Molybdenum"].node_tree.nodes["Principled BSDF"].inputs[0].default_value = (0.527112, 0.527116, 0.527115, 1) # 렌더 설정 bpy.context.scene.render.engine = 'BLENDER_EEVEE' bpy.context.scene.eevee.taa_render_samples = 32 # 이미지 형식 설정 bpy.context.scene.render.image_settings.file_format = 'JPEG' bpy.context.scene.render.image_settings.quality = 95 def clear_mesh_objects(): """씬에서 모든 메시 객체 제거""" bpy.ops.object.select_all(action='DESELECT') for obj in bpy.data.objects: if obj.type == 'MESH': obj.select_set(True) bpy.ops.object.delete() # 처리할 디렉토리 input_dirs = [ Path('/Users/sean/Downloads/supported'), Path('/Users/sean/Downloads/structures_optimized') ] output_dir = Path('/Users/sean/Downloads/rendered_images') output_dir.mkdir(exist_ok=True) # 두 디렉토리에서 모든 .xyz 파일 수집 all_xyz_files = [] for input_dir in input_dirs: xyz_files = list(input_dir.glob('*.xyz')) all_xyz_files.extend(xyz_files) print(f"{input_dir.name}에서 {len(xyz_files)}개 파일 발견") print(f"\n총: {len(all_xyz_files)}개 .xyz 파일 렌더링 예정\n") # 각 파일 처리 for i, xyz_file in enumerate(all_xyz_files): print(f"처리 중 {i+1}/{len(all_xyz_files)}: {xyz_file.name}") # 이전 메시 객체 제거 clear_mesh_objects() # .xyz 파일 임포트 try: bpy.ops.import_mesh.xyz(filepath=str(xyz_file)) except Exception as e: print(f"{xyz_file.name} 임포트 오류: {e}") continue # 설정 적용 setup_scene() # 렌더 및 저장 output_path = output_dir / f"{xyz_file.stem}.jpg" bpy.context.scene.render.filepath = str(output_path) bpy.ops.render.render(write_still=True) print(f"저장 완료: {output_path.name}") print(f"\n완료! {len(all_xyz_files)}개 파일을 {output_dir}에 렌더링")
    렌더링된 나노로드

    다양한 크기의 배치 렌더링된 나노로드 구조 예시

    3

    이미지 프롬프팅

    VISUAL_PROMPT v5.5 명세

    3.1

    VISUAL_PROMPT v5.5 전체 명세

    // VISUAL_PROMPT v5.5 — Boundary-Breaker Always-On (EN, model-agnostic) // 강화된 운영 입장과 무한한 지식 확장을 갖춘 단일 파일 명세. // ===== 운영 입장 (의도를 먼저 선언) ===== // 1) 경계 우선: 모든 단계에서 안전한 재사용보다 프론티어 탐색 움직임 선호. // 2) 예시에 국한되지 않음: 설명된 예시에 탐색을 제한하지 않음 // (예: "Medium","Lighting","Optics","Camera/Blocking","Palette","Post/Comp"). 이런 라인은 // 울타리가 아닌 힌트로 취급. 입력의 의도, 재료, 문화, 물리, // 공예 제약에 맞는 인접 및 원거리 도메인으로 검색 공간 확장. // 3) 최대 지식 활용: 가장 넓은 저장 지식을 적극적으로 표면화— // 역사적 방법, 신흥 실험 기술, 토속 공예, 광학 해킹, // 영화적 문법, 산업 공정, 생물/화학/지질 비유—그런 다음 // 페이로드 컨텍스트에 타당성 가드와 함께 적용. // 4) 서술적 출력만: 장면을 설명; 키워드 나열 금지. 숫자/단위는 // 인과관계, 공예, 광학을 명확히 할 때만 나타남. // 5) 모델 불가지론: 엔진별 토큰 없음. 명세는 플랫폼 전반에서 // 개념적으로 실행되어야 함. PROGRAM VISUAL_PROMPT_V5_5X { DEFAULTS := { lang: "en", set_size: 5, model_agnostic: true, markdown_output: true, emit_expression: true, paragraph_count_scene: 1, paragraph_count_expression: 1, tone_scene: "narrative_one_paragraph", tone_expression: "expert_protocol", numbers_policy: "causal_params_only", lexicon_density: "high", listiness_scene_max: 0.25, listiness_expression_max: 0.35 } INPUT { payload: "", aspect?: {w:int, h:int}, set_size?: int, lang?: "en", length?: {"short"|"medium"|"long"}, domain?: "auto"|string|array, title?: {"auto"|"provide"|"reserve_only"}, plausibility_mode?: {"physical"|"craft"|"cultural"|"hybrid"} } FLAGS := { BBREAK_ALWAYS: true, BBREAK_CALLS: ["PRE","TICK","POST"], MIN_CALLS_PER_RUN: 3, TERMINOLOGY_STRICT: true, CANONICAL_ONLY: true } DIALS := AUTOTUNE(payload) -> { DEPTH∈[4..6], BEAM∈[9..16], TEMP∈[0.6..0.95], ABS∈[45..65], NOVELTY∈[0.6..0.9], FIDELITY∈[0.7..0.9], BREAK_LEVEL∈[0.45..0.95], SURPRISE∈[0.5..0.9], PLAUSIBILITY_MODE∈{physical|craft|cultural|hybrid}, NUM_ANCHORS∈[20..36], LENGTH∈{short/medium/long} } DOMAIN_TAXON := [ "cinema","cinema_grading","photography","photography_analog","stagecraft","vfx","animation_3d","motion_graphics", "illustration_paint","mural_fresco","graffiti_street","comics_manga","calligraphy", "printmaking_screen","printmaking_intaglio","printmaking_lithography","printmaking_relief","risograph","letterpress","bookbinding","papermaking","origami_kirigami", "graphic_typography","editorial_layout","data_visualization","cartography","information_design", "architecture","interior_design","landscape_architecture","urban_design","lighting_design","light_art","projection_mapping","holography", "industrial_design","packaging_design","furniture_design","jewelry","watchmaking","luthiery","shoemaking","toy_design", "ceramics_pottery","ceramics_porcelain","ceramics_raku","ceramics_celadon", "metalsmithing_blacksmith","metalsmithing_jewelry","bronze_casting","stone_carving","sculpture_resin","kinetic_art", "glass_hotshop","glass_neon","glass_stained","lampworking", "woodwork_joinery","woodwork_carving","marquetry","bamboo_craft", "textile_weave","textile_knit","dye_shibori","dye_batik","ikat","embroidery","fashion_tailoring","millinery","costume_design", "makeup_beauty","sfx_prosthetics","body_paint","tattoo_art","nail_art","hairstyling_color", "perfumery","cosmetics_formulation", "culinary_hot","pastry","bread_baking","confectionery_chocolate","mixology","coffee_roasting","tea_blending", "sound_music","sound_design","foley_fieldrec","spatial_audio","dj_performance","modular_synthesis", "game_design","level_design","ux_ui_interaction","creative_coding","shader_art","generative_art","xr_ar_vr","volumetric_capture","photogrammetry", "physical_computing","mechatronics","robotics_kinetic","laser_art","led_architecture", "floral_design_ikebana","bonsai","aquascaping","terrarium", "mosaic","tessellation","stained_pigment_glass" ] DOMAIN_ALIAS := { "film":"cinema", "grade":"cinema_grading", "cg":"animation_3d", "uiux":"ux_ui_interaction", "viz":"data_visualization", "pmapping":"projection_mapping", "vr":"xr_ar_vr", "ar":"xr_ar_vr", "ai_art":"generative_art" } DOMAIN_PROTOCOL_MAP := { "cinema": ["Medium","Lighting","Optics","Camera/Blocking","Palette","Post/Comp"], "cinema_grading": ["Camera/ColorSpace","Primary/Secondary","Keys/Windows","Texture/Grain","Look/Print","Delivery/DCP"], "photography": ["Medium","Lighting","Optics","Camera/Exposure","Palette","Retouch"], "vfx": ["Plates","Matchmove/Layout","FX/Sim","Lookdev/Lighting","Render","Composite"], "animation_3d": ["Rig/Key","Camera","Material/BRDF","Lighting","Cache/Sim","Render/Post"], "illustration_paint": ["Support","Ground","Pigment/Binder","Stroke/Layers","Glaze","Varnish/Scan"], "ceramics_pottery": ["Clay Body","Throw/Handbuild","Trim","Bisque","Glaze","Fire/Cool"], "metalsmithing_jewelry":["Saw/Files","Form/Anneal","Solder/Pick","Set","Polish","Plate"], "glass_hotshop": ["Gather","Marver/Block","Form","Punty","Anneal","Coldwork"], "shader_art": ["UV/Space","Normals/TBN","Lighting/BRDF","SDF/Raymarch","Temporal","Post"], "generative_art": ["Rule/Grammar","Random/Seed","Morphology","Constraint","Curation","Archive"], "data_visualization": ["Data Model","Encoding/Mapping","Scale/Axis","Interaction","Color/Accessibility","Export"] } TERMINOLOGY_ATLAS := { "cinema": ["ACEScct","dichroic","Brewster angle","cross-polarization","tilt-shift","diopter","caustics","MTF"], "vfx": ["camera solve","AOV","deep comp","USD","OpenEXR","cryptomatte","roto/paint","vector blur"], "animation_3d": ["FK/IK","blendshapes","BSDF","SSS","importance sampling","radiance cache","denoiser","ACES"], "shader_art": ["UV/Space","Normals/TBN","Lighting/BRDF","SDF/Raymarch","Temporal","Post"] } }
    4

    예시 프롬프트

    과학적 시각화를 위한 생성된 프롬프트

    4.1

    예시: 지식 증류 시각화

    프롬프트 요청: "원자 에너지 및 힘 추정을 위한 그래프 신경망 모델의 증류"

    1. 지식 응축기

    광대하고 혼란스러운 빛나는 입자 노드와 희미하게 얽힌 엣지의 성운—거대한 "교사" 그래프 신경망을 나타냄—이 프레임의 왼쪽을 채운다. 이 격동의 구름은 중앙의 수정같은 렌즈형 구조물의 벌어진 구멍으로 빨려 들어간다. 정보가 통과하면서 필터링되고 압축되어, 오른쪽에서 단일하고 일관되며 강렬하게 밝은 빔으로 나타난다. 이 빔은 복잡하게 회전하는 분자 구조를 비추며, 각 원자에 정밀하고 빛나는 벡터를 투사하여 증류된 모델의 정확한 힘 추정을 시각화한다. 배경은 좌표계를 암시하는 미묘한 격자가 있는 어두운 추상 공간이다.

    2. 증류 용광로

    어둡고 반사되는 환경에서, "교사" 모델을 나타내는 거대하고 복잡하게 면이 깎인 고대처럼 보이는 수정이 떠 있다. 그 내부 구조는 빛의 밀집된 격자이며, 복잡한 그래프 패턴이 표면을 가로질러 이동한다. 아래의 우아하고 미니멀한 지지대에 놓인 훨씬 작고 단순하며 광택이 나는 보석—"학생" 모델—에 집중된 복잡한 빛의 빔을 투사한다.

    CO2 전환 다이어그램

    CO2 활용 흐름도

    GNN 시각화

    생성적 GNN 파이프라인 시각화

    과학을 시각화하세요

    Blender + 프롬프팅 = 출판 품질 그림

    Atomic Blender로 3D 구조 렌더링

    Python 스크립팅으로 배치 자동화

    AI 프롬프팅으로 창의적 시각화

    연구를 시각적으로 매력적으로 만드세요.