2020-02-01blenderのpython用のapiを見てて、書いてみたくなったので始めてみました。lispの影響を強く受けてるものですし、haskellも好きだったので関数プログラミングのスタイルを使ってます。多くの人のスタイル(手続き型言語のスタイル)と違ってきてるので、違いで混乱することもあるかもしれません。書けるようになれば生産性も変わりますよ。spheres(球体)を使った格子状にオブジェクトを配置させるスクリプトです。最初だからこれで十分でしょう。以下に示していますが、コメントを除けば10行もいりません。main()これはblenderのscriptingモードのところに書いたスクリプトですね。apiを使うときに必要なライブラリです。sphere(球体)を作成している。作成位置のリストを読み込んで処理をさせてます。独自に書き換えてみてください。いまはシンプルにしてるけど、抽象化する関数は後の記事で考えてます。これは作成するオブジェクトの位置のリストを作ってる関数です。この書き方は読まれてる方次第で見慣れないかもしれないですが、内包表記を使ってます。(おまけにfor文より高速のようです。)細かな説明は検索して調べてほしいけど、これで3次元の位置をタプル(カッコで区切ったデータ)で作ってリストにしています。[(-4,-4,-4),(-4,-4,-2),...]という感じですね。最後に記述してスクリプトの中身を実行させています。ここでは、-4から4のx,y,z位置を2ステップごとに作ってリスト化したものを使って、オブジェクトを作成させています。基本的に関数を読み込んでおくくらいの動作です。一つの関数のところにいくつもの動作をすることを記述すると、可読性も後に改造するときにもすごく扱いづらいものになります。このへんが関数プログラミングスタイルと多くの作成の仕方の手続き型プログラミングの違いなんです。最後に今回はこれだけです。化学物質の固体分子で見てるような3DCGなんですけど、次はマテリアルの違いを条件で分けて見ると良いなと思ってます。if文を使って分けてしまうのも一つの手ですが、関数プログラミングスタイルなので、filterと高階関数を使って、分けることを考えてます。pythonでのマテリアルの扱いがまだ不勉強なので、明日作れるかどうかはわからないです。分け方のルールさえ決まっていれば、オブジェクトをfilterで分けてリスト化して、そのリストのオブジェクト一つ一つに変化させる関数を作るって方針ですね。PS.崩した体調も治ってきたので今月は今までよりブログを盛り上げたいですね。語感の覚えやすさとフリック入力で打ちやすいアルファベットを選んだ名前です。それ以上の意味はありません。運営してるブログです。Gmailのy.takenakaです。LightroomとPhotoshopを使って背景整理をしてきれいにする。2019-05-073DCG修行記スカルプトモデリングを行う。2019-09-24フェイスブックの専用ページを作ったのでもしよければご登録お願いします。登録していただけると励みになります。