[PYTHON] Histoire de créer un planétarium virtuel [jusqu'à ce que les débutants créent un modèle avec un script et parviennent à l'assembler]

Ce qui a été fait

2019121421085379.png

Articles à faire

  1. Avant de commencer à faire: à propos du concept
  2. Préparation pour faire un ciel étoilé 2.Faire un ciel étoilé
  3. Ajustez la luminosité
  4. Créez un effet de météore ep. Note de bas de page

0: Concept

J'aimerais d'abord décliner parce que c'est souvent mal compris, mais je ne veux pas créer un beau ciel étoilé. ** **

Ce que je veux faire ici, c'est ** "Je veux reproduire l'espace en utilisant un support très flexible appelé VR" **. (Comme ce sera un peu long, je vais compléter cette zone avec la note de bas de page 1.) Après tout, il peut être propre en conséquence, mais ce n'est pas le vrai but de le nettoyer. (Note de bas de page 2)

Type de catalogue

Lors de la création d'un planétarium, vous devez vous référer à certaines informations telles que la position des étoiles, la luminosité (grade) et dans certains cas la couleur. Je vais laisser les détails dans la note de bas de page, mais peu importe combien vous le portez sur le côté, vous devez mettre des milliers d'étoiles ou plus dans le planétarium. Par conséquent, vous devez apporter ces données de quelque part. Si vous voulez le faire à la main, vous pouvez faire une copie d'une carte d'étoiles comme Uranometria et faire un trou, mais il est préférable que les nombres soient organisés comme indiqué dans le tableau pour une utilisation informatique. Cette collection de données s'appelle un catalogue d'étoiles, mais celles-ci doivent être sélectionnées car elles sont nombreuses en fonction de l'âge et des critères de leur création. Pour donner un exemple

Il existe divers autres catalogues. Ce qui précède est le résultat de l'observation avec la lumière visible, mais il existe également des données avec des ondes radio, des rayons infrarouges et des rayons X. De plus, il existe vraiment de nombreux catalogues sous différents angles, comme le catalogue Grise créé dans la perspective de savoir s'il est ou non près de la Terre, et le catalogue Mesier qui ne recueille que les galaxies et les nébuleuses.

Examen de la méthode de réalisation

Comme le nombre d'étoiles à créer comme décrit ci-dessus est énorme, il est extrêmement difficile de décrire simplement chaque étoile (et il y a beaucoup plus de difficultés ...). Par conséquent, il était nécessaire d'abord considérer et examiner la méthode de réalisation. Certains d'entre eux sont présentés ci-dessous.

Catalogue à utiliser

Créer un planétarium ne commence pas sans avoir choisi un catalogue. Il y a trois choses que je ne peux pas abandonner cette fois,

  1. Insérez plus qu'assez d'étoiles pour exprimer la rivière du ciel (plus d'un million)
  2. Les étoiles peuvent être manipulées de manière interactive à l'avenir
  3. Touchez les étoiles et regardez à portée de main

Je voulais absolument les protéger. Par conséquent, les spécifications suivantes sont naturellement devenues un élément incontournable.

  1. Le catalogue de base est tycho ou gaia
  2. Des catalogues d'autres longueurs d'onde seront ajoutés ultérieurement (SDSS, etc.)
  3. Le corps céleste à toucher est Grise
  4. Autres catalogues extragalactiques (tels que galaxies et nébuleuses)

Cependant, comme il est difficile de combiner des corps célestes extracorporels en un seul VCI de fond en raison de la capacité, nous avons décidé de le faire en tant qu'add-on, et pour le moment, 2 et 3 et 4 ont été reportés.

Comment créer un modèle

Il s'avère que nous devons dessiner au moins un million d'étoiles, mais certainement ** tout d'abord cela ne peut pas être fait manuellement. ** Par conséquent, je n'avais pas d'autre choix que de créer une étoile à l'aide d'un ordinateur, mais plusieurs méthodes ont été envisagées.

  1. Appliquer une texture à un modèle simple
  2. Exprimez avec des particules 3.Faites une forme d'étoile avec un modèle

Premièrement, compte tenu des exigences nécessaires, 1 est hors de question (note de bas de page 3). Au début, je pensais que 2 aurait un petit nombre de polygones, mais j'ai renoncé à entendre que le traitement des particules semble être étonnamment lourd (la formule de calcul a déjà été créée sur la base de la théorie). Inévitablement, 3 a été sélectionné. Ensuite, il s'agira de savoir comment créer des données de modèle, mais c'est là que l 'article précédent devient important. Dans l'article lié, j'ai utilisé python avec un mélangeur intégré pour créer des figures géométriques, ce qui en est une application. ** Les données du catalogue sont un peu prétraitées avec awk, lues par blender intégré python, et sur la base de ces données, blender dessine avec le module bpy. ** **

Comment exprimer la luminosité

** À partir de la conclusion, il est exprimé par la taille du modèle. ** ** Vous vous demandez peut-être pourquoi vous emprunteriez une voie aussi détournée, mais je l'expliquerai ci-dessous.

Vous pouvez penser que la luminosité est facile si vous jouez avec les couleurs. Cependant, dans certaines circonstances, ce n'est pas le cas. La luminosité d'une étoile est généralement exprimée en «grade», et plus le nombre est petit, plus il est brillant. En excluant les corps célestes du système solaire, les étoiles visibles seraient de -1,5 pour le brillant et de +6 pour l'obscurité à la limite de l'œil humain. Vous pourriez penser qu'il n'y a que 8 étapes, mais selon la loi de WH, la sensation humaine suit une fonction exponentielle. (Le son est le même et les fonctions qui apparaissent dans l'article de Nyafu-san sont également incluses) Le grade d'étoile (grade relatif) est exprimé comme suit, en supposant que Vega dans la constellation est de 0,0 mag ou que l'étoile arctique est de 2,0 mag. (Note de bas de page 5)

m_1 - m_2 = -\frac{5}{2} log_{10}\frac{b_1}{b_2}

Il y a une différence de 2,51 fois par 1 différence égale, et 994 fois, soit environ 1000 fois la différence entre -1,5 mag et +6,0 mag. Il y a 13 étoiles noires mag sur tycho, donc c'est 1000 fois plus d'un million de fois ...

D'autre part, les écrans HMD, comme la plupart des écrans, n'ont que 8 bits de gradation, peut-être jusqu'à 255. De plus, même si la gradation ne peut être exprimée que par la couleur, le nombre de matériaux mourra. De plus, le nombre de modèles augmentera, alors ne le faites pas. N'est-il pas possible de changer la luminosité avec cela?

Dans un planétarium général, cela s'exprime par la taille d'une étoile. Le planétarium (physique) projette la lumière de l'ampoule au centre de l'équipement à travers le trou, mais comme la luminosité de la source de lumière est constante, si la taille augmente 2,51 fois sur une base de surface, il y a une différence d'un degré. Peut être exprimé.

Cette méthode est très pratique car elle n'augmente pas le nombre de mailles, mais elle présente un inconvénient: les corps célestes trop brillants deviennent trop gros pour être considérés comme des étoiles. Par conséquent, il est nécessaire de déterminer un corps céleste approprié (par exemple, l'étoile la plus brillante: Sirius, Vénus, etc.) comme limite supérieure, et de réduire la taille à la limite où elle ressemble à une étoile. Et comme nous le verrons plus tard, cela fixera plus tard les limites du planétarium VR.

code python

Sur la base de ce qui précède, j'ai créé un code python de génération d'étoile, donc j'écrirai à propos de ce code et du mur que j'ai rencontré lorsque je l'ai fait.

Contenu du code

import bpy
from math import sqrt,pi,sin,cos,acos,asin,atan2
import csv

scale = 0.1*2.51*2.51
distance =30
nloop = 9
with open('D:\\Blender\\hipparcos_nolimit_DirectionCosine.dat') as f:
    reader = csv.reader(f)
    j = 1
    for i,row in enumerate(reader):
        l = [float(row[0]),float(row[1]),float(row[2]),float(row[3])]
        if(i<13000*nloop):
            continue
        
        if(l[0]<1.5):
            continue
            #ittousei dake mensekiha naositenai
            ngon = 12
 
        elif(l[0]<3.5):
            continue
            ngon = 6
   
        elif(l[0]<4.5):  
            continue
            ngon = 4
            
        else:
            ngon = 4
             

        bpy.ops.mesh.primitive_circle_add(vertices=ngon,fill_type='NGON',radius=scale*sqrt(10**((1-l[0])/2.5))/(sin(pi/ngon)*cos(pi/ngon)/2*ngon),
                                            location=(l[1]*distance,l[2]*distance,l[3]*distance),
                                            rotation=(0,-asin(l[3])-pi/2,atan2(l[2],l[1])))        

        
        if(i>100*j):
            bpy.ops.object.select_by_type(type = 'MESH')
            bpy.ops.object.join()
            j += 1
        if(i>13000*(nloop+1)):
            break
        
        
bpy.ops.object.select_by_type(type = 'MESH')
bpy.ops.object.join()    
    
#bpy.ops.view3d.snap_cursor_to_center()
#bpy.ops.object.origin_set(type='ORIGIN_CURSOR')           
    

En fait, ce code à lui seul n'est pas un bouton unique. Premièrement, il y a plus d'un modèle à générer. Le modèle est divisé en cinq parties, nommées étoile de première classe, plus brillante, plus sombre, plus sombre et plus sombre2. Chacun est divisé par la luminosité, mais la raison est écrite dans la phrase «Scintillement de l'écran» ci-dessous. À ce moment-là, je joue avec les variables et je décommente. La variable à falsifier est l'échelle, qui est multipliée par 2,51 pour chaque étape lors de la création d'une étoile noire. Commenter, comme décrit ci-dessous, est une mise au point de l'apparence de la forme.

De plus, pour nloop, c'est trop lent à dessiner, donc je dessine partiellement le modèle à mi-chemin, je l'enregistre, redémarre blender et incrémente nloop de +1 pour passer de 0 à 10. C'est parce que Blender ne libère pas la mémoire, et à la fin du dessin, même 48G de mémoire débordent. Si vous ne divisez pas le temps de dessin, cela prendra plusieurs heures, et même si vous le divisez, cela prendra 20 minutes, alors soyez patient.

régime

Au début, je pensais aux points ronds, mais comme la modélisation 3D est exprimée par des polygones, si vous faites un beau cercle, la capacité augmentera. Cependant, les étoiles brillantes sont si grandes qu'il est difficile de les rendre triangulaires. J'ai eu du mal avec ce point car il était difficile à trouver dans le planétarium actuel. ** La solution consistait à modéliser les grandes étoiles proches de cercles tels que les hexagones et les octogones, et à modéliser légèrement les petites étoiles telles que les carrés et les triangles **. Je l'ai commenté car il a l'air différent en fonction de la luminosité, je le modifie donc comme il convient. Cependant, cette méthode ne suffit pas pour changer simplement le sommet, il faut sauvegarder la zone. Le coefficient a de la formule de conversion est le suivant lorsqu'il s'agit d'un carré à n côtés. l est le facteur de luminosité (dans ce cas, la note).

a=\frac{\sqrt{10^{((1-l)/2.5)}}}{(\sin(\pi/n)*\cos(\pi/n)/2*n)}

Si vous voulez faire des ajustements fins, jouez avec l'échelle.

C'est trop lourd!

Au début, je voulais invoquer chaque étoile, j'ai donc créé tous les objets étoiles séparément. Mais c'était trop lourd. C'était un objet vicieux que si vous mettiez en 800 morceaux, il serait lourd et l'écran serait en désordre, et dans certains cas, la pièce tomberait au moment où vous l'éteignez. Si c'est trop, il semble que même le téléchargement vers TSO sera rejeté, et ** il est devenu étonnamment léger lorsqu'il est combiné en un seul utilisant la combinaison d'objets **. J'ai réalisé que le poids de l'opération est déterminé par le nombre d'objets enfants et non par la capacité.

Scintillement de l'écran

Le script ci-dessus a été initialement généré pour toutes les notes, mais un problème est survenu. Il semble qu'il n'y ait aucun problème pour prendre une vidéo ou une image, mais lorsque je regarde à travers le HMD, l'écran scintille. C'est difficile à expliquer car je n'ai expérimenté que # Raito-san, mais en bref, c'est ** désagréable **. Ce n'est pas un tel univers! C'est pourquoi j'avais besoin de le guérir.

Apparemment, je pensais que la cause de ce phénomène était le traitement lorsqu'un objet plus petit que la taille de pixel du HMD était affiché à l'écran. S'il y a un objet A qui a la même taille qu'un pixel et qui a une luminosité de surface (luminosité) S, et un objet B qui est la moitié de la taille (zone) d'un pixel et a la même luminosité de surface S, vu visuellement La quantité de lumière provenant de ce pixel doit être respectivement Objet A: S Objet B: 0,5S. En d'autres termes, il devrait être divisé par deux, mais ** Apparemment, les deux sont S dans la distribution virtuelle **. De plus, comme la grille entre les pixels est une zone invisible, l'une des causes est que toute étoile peut ou non être dessinée lorsqu'elle apparaît dans le pixel adjacent. L'autre est que la luminosité est exprimée par la taille, donc la luminosité par unité de surface est constante, de sorte que toutes les étoiles que vous vouliez assombrir sont dessinées avec la luminosité maximale, et à l'origine c'est un œil en un seul grain. Le nombre était trop grand car même les étoiles invisibles pouvaient être vues comme un seul grain.

Pour être honnête, je pense que ce processus n'est pas bon, et la relation entre «Objet A: S Objet B: 0.5S» ci-dessus est ** à proprement parler, c'est un processus d'anti-aliasing **. Le fait est que ** il y a une fréquence élevée de dentelure avec un nombre insuffisant de pixels **, et je me demande ce que c'est, bien sûr, le calcul est lourd, mais je pense qu'il y a un côté, mais dans le futur C'est un problème que je veux que vous résolviez.

Après tout, c'est un problème qui peut être résolu sans autorisation si la technologie progresse, donc je ne suis pas motivé pour y faire face, mais c'est étrange, alors j'ai décidé de le résoudre. Puisque la cause est principalement lorsque "le modèle semble plus petit que la taille des pixels" **, j'ai ajusté la limite inférieure de la taille du modèle "pour couvrir au moins 4 pixels" **. Cependant, je ne connaissais pas la taille de chaque pixel HMD, donc je ne l'ai pas calculée et je l'ai vérifiée de mes propres yeux tout en émettant des étoiles plusieurs fois. (Par conséquent, le scintillement peut toujours rester sur les modèles avec des résolutions inférieures à oculus rift S.) Et ** La gradation d'expression de qualité manquante dépend de la floraison pour la plus lumineuse tout en conservant la taille. La limite supérieure de l'ajustement a été augmentée et la limite inférieure a été résolue en créant plusieurs couleurs de matériau afin que les étoiles sombres puissent être exprimées même avec la même taille. ** ** Pour cette raison, le modèle est divisé en étoiles de première classe, brillantes, plus sombres, plus sombres et plus sombres2.

Lier émission et qualité

2019112021513265.png

En raison du traitement de la luminosité ci-dessus, j'ai dû utiliser les émissions correctement, j'ai donc utilisé MToon pour étudier en détail les émissions que je pensais seulement comme une aide au début. Le test sensoriel a été réalisé en disposant les étoiles créées par la méthode examinée dans «Comment exprimer la luminosité» en jouant petit à petit avec la valeur d'émission. Bref, j'ai testé un par un pour voir s'il y avait un inconfort qui semblait différent. Cela ressemble à l'image ci-dessus.

Les résultats expérimentaux sont les suivants

emit +1 +2 +3 +4 +5 +6 +7 +8 +9 +10
classe -1 -2 -3 -4 -5 -6 -7

☓ est trop lumineux pour être utilisé car il ne ressemble pas à un ciel étoilé. est ce que cela signifie. Il semble que la note diminue de +1. Il est difficile de le présenter scientifiquement ici, alors j'ai décidé de le croire tel que je le ressentais.

Effet météore: effekseer

Je pensais que ce serait plus facile à faire s'il y avait une sorte d'événement astronomique, alors j'ai ciblé le groupe de météores Futago. Ensuite, j'ai dû faire quelque chose à propos du météore, mais j'ai décidé de créer le météore avec des particules. Pour être honnête, je ne suis pas confiant car j'ai joué avec des particules pour la première fois, et je ne peux pas faire grand-chose, mais la composition est la suivante.

image.png

Je l'ai finalement fini

Puisqu'il est fait comme un module complémentaire d'arrière-plan, ** il n'est pas entouré d'un dôme ** Tout VCI d'arrière-plan peut être utilisé. Ça fait du bien de se mettre dans une montagne (la photo est combinée avec le VCI de Pio)![2019121520195342.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0 / 494837 / 6983ec94-5448-73e2-385f-9c8969f01725.png)

Je dois mettre 1 million dans le futur, mais je dois le résoudre car le problème de la limite inférieure de luminosité se pose ...

note de bas de page

Note de bas de page 1

En premier lieu, le planétarium a été créé dans le but d'éduquer le fonctionnement des planètes, qui se déplacent différemment du ciel étoilé ordinaire, comme son nom l'indique. ** Après tout, le premier planétarium n'avait pas de ciel étoilé **, par exemple, [Aiseai Zinga Planetarium](https://ja.wikipedia.org/wiki/%E3%82%A8%E3%82%A4%E3%82] % BB% E3% 83% BB% E3% 82% A8% E3% 82% A4% E3% 82% B7% E3% 83% B3% E3% 82% AC% E3% 83% BB% E3% 83% 97 % E3% 83% A9% E3% 83% 8D% E3% 82% BF% E3% 83% AA% E3% 82% A6% E3% 83% A0) est un bon exemple. Afin de le montrer de manière plus réaliste, le Musée allemand a installé une machine qui le projette avec le ciel étoilé qui est l'espace qui l'entoure.

C'est ce "flow" que je pense faire, Planétarium sans ciel étoilé → Planétarium avec ciel étoilé Comme le saut a été fait par le musée allemand ** Planétarium où vous pouvez voir le ciel étoilé → Je veux créer une expérience d'un espace où vous pouvez aller et venir entre les étoiles et faire diverses choses. ** ** En d'autres termes, en un mot Vous avez dit que vous feriez un planétarium, c'est un mensonge. Cosmorium est celui à fabriquer. ** Je veux créer un espace avec des étoiles **

Note de bas de page 2

Il y a déjà beaucoup de gens qui ont collé des "motifs en forme d'espace" en arrière-plan pour les rendre beaux, donc je ne veux pas faire de telles choses.

Note de bas de page 3

On me pose souvent la question: "Pourquoi ne pas mettre de texture dessus?" J'ai dit que le plus petit nombre d'étoiles était de 1 million, c'est pourquoi. À votre avis, quel est le rapport de surface entre la zone avec des étoiles et la zone sans étoiles? Les étoiles sont extrêmement éloignées l'une de l'autre, 10 000? Disons que c'est 100 fois plus que ça. Cela nécessiterait au moins 1 million x 100 = 100 millions de pixels. ** Pouvez-vous préparer une telle image? ** Et étant donné que les étoiles sont relativement irrégulières et biaisées, 100 millions de pixels ne suffisent pas du tout.

Note de bas de page 4

Je suis souvent surpris par le nombre d'étoiles que je mets, alors j'aimerais ajouter que le nombre d'étoiles que les humains peuvent voir est jusqu'à la 6ème magnitude, et on dit qu'il est d'environ 6000 ou 8000. Alors que faites-vous avec 100 000 ou 2 millions? Je pense que certaines personnes ont des questions comme celle-ci. Mais ce n'est pas du tout en vain. ** Invisible signifie qu'il ne peut pas être reconnu comme chaque grain, et si de nombreuses étoiles sont proches les unes des autres, cela aura l'air vague, et c'est le Tenkawa que vous pouvez voir **. (Extrêmement parlant, on sait que l'intensité de la lumière émise par une seule molécule ou un atome en raison du mouvement thermique est une énergie élevée, mais même la lumière du soleil en est une collection. Vous pouvez voir le soleil, non? Vous pouvez le voir si vous en rassemblez beaucoup. Ensuite, la limite qui affecte vraiment la vision humaine qui compose le fleuve céleste est d'environ une douzaine de degrés, et le nombre d'étoiles est d'environ 1 million (en fait, il y a la lumière du ciel nocturne, et même les plus sombres le sont la nuit. Cela contribue à la lumière, mais il est omis car l'histoire devient trop détaillée). Était-ce difficile à comprendre? Il n'est pas étonnant que, depuis que le planétarium est né sous sa forme actuelle, il a été lié à la «théorie de la limite de 6e année» partout dans le monde pendant environ 100 ans, mais seulement vers 2000, le Japon l'a. Sera vaincu par les étudiants. Son nom est Takayuki Ohira. Vous avez peut-être entendu parler du mot megastar. Le planétarium qui projette jusqu'à une douzaine de notes créé par lui a créé un ciel nocturne d'une beauté à couper le souffle et a été très bien accueilli. Cela a secoué l'industrie et changé la norme. Et maintenant, les planétariums à la pointe de la technologie des grands fabricants, qui projetaient jusqu'à il y a quelque temps au plus 8 000 étoiles, projettent désormais plus de 100 millions d'étoiles au maximum.

Note de bas de page 5

Strictement différent. Il fut un temps où c'était une méthode comme la notation, mais comme il est devenu clair que la luminosité de la plupart des étoiles fluctue, de nos jours, la luminosité de plusieurs étoiles, qui est la norme, est mesurée et moyennée par la méthode de mesure normalisée. La façon de le faire est prise.

Recommended Posts

Histoire de créer un planétarium virtuel [jusqu'à ce que les débutants créent un modèle avec un script et parviennent à l'assembler]
L'histoire de la création d'une caméra sonore avec Touch Designer et ReSpeaker
L'histoire de la création d'un outil pour charger une image avec Python ⇒ l'enregistrer sous un autre nom
Comment assembler de nombreux pipelines et les ranger en même temps
Script pour tweeter avec des multiples de 3 et des nombres avec 3 !!
De l'introduction de Flask sur CentOS au service sur Nginx et uWSGI
Je n'aime pas être frustré par la sortie de Pokemon Go, j'ai donc créé un script pour détecter la sortie et le tweeter
Décompressez de nombreux fichiers compressés au format ZIP avec des commandes Linux et attachez-les à UTF8
Une histoire qui facilite l'estimation de la surface habitable à l'aide d'Elasticsearch et de Python
Un script qui facilite la création de menus riches avec l'API de messagerie LINE
Une histoire qui rend le débogage de modèle plus facile à voir dans l'environnement Django + SQLAlchemy
Créez un script de déploiement avec fabric et cuisine et réutilisez-le
L'histoire de la création d'un bot de boîte à questions avec discord.py
Vue d'ensemble de l'environnement virtuel Python et comment le créer
L'histoire de la création d'un pilote standard pour db avec python.
J'ai écrit un script pour aider goodnotes5 et Anki à travailler ensemble
L'histoire de la création d'un module qui ignore le courrier avec python
Est-il possible de se lancer dans une entreprise de pré-cotation et de faire fortune avec des stock-options?
Mettez à jour les données en les téléchargeant sur s3 d'aws avec une commande, et supprimez les données utilisées (en chemin)