diff --git a/src/assets/icons/blog/U_ProfileIcon_Positive.svg b/src/assets/icons/blog/U_ProfileIcon_Positive.svg index a894e28..f6093ab 100644 --- a/src/assets/icons/blog/U_ProfileIcon_Positive.svg +++ b/src/assets/icons/blog/U_ProfileIcon_Positive.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/content/blog-metas/436.json b/src/content/blog-metas/436.json new file mode 100644 index 0000000..6526f69 --- /dev/null +++ b/src/content/blog-metas/436.json @@ -0,0 +1,3 @@ +{ + "postDate": "2021-05-09T21:48:00+09:00" +} diff --git a/src/content/blog-metas/452.json b/src/content/blog-metas/452.json new file mode 100644 index 0000000..8fe7f2b --- /dev/null +++ b/src/content/blog-metas/452.json @@ -0,0 +1,3 @@ +{ + "postDate": "2021-05-16T16:29:00+09:00" +} diff --git a/src/content/blog-metas/465.json b/src/content/blog-metas/465.json new file mode 100644 index 0000000..8956132 --- /dev/null +++ b/src/content/blog-metas/465.json @@ -0,0 +1,3 @@ +{ + "postDate": "2021-05-22T22:31:00+09:00" +} diff --git a/src/content/blog-metas/487.json b/src/content/blog-metas/487.json new file mode 100644 index 0000000..7118915 --- /dev/null +++ b/src/content/blog-metas/487.json @@ -0,0 +1,3 @@ +{ + "postDate": "2021-12-16T19:29:00+09:00" +} diff --git a/src/content/blog-metas/490.json b/src/content/blog-metas/490.json new file mode 100644 index 0000000..7d58a6e --- /dev/null +++ b/src/content/blog-metas/490.json @@ -0,0 +1,3 @@ +{ + "postDate": "2021-12-15T00:08:00+09:00" +} diff --git a/src/content/blog-metas/512.json b/src/content/blog-metas/512.json new file mode 100644 index 0000000..646edbf --- /dev/null +++ b/src/content/blog-metas/512.json @@ -0,0 +1,3 @@ +{ + "postDate": "2021-12-16T02:01:00+09:00" +} diff --git a/src/content/blog-metas/522.json b/src/content/blog-metas/522.json new file mode 100644 index 0000000..3217b6b --- /dev/null +++ b/src/content/blog-metas/522.json @@ -0,0 +1,3 @@ +{ + "postDate": "2021-12-19T00:08:00+09:00" +} diff --git a/src/content/blog-metas/524.json b/src/content/blog-metas/524.json new file mode 100644 index 0000000..89b381c --- /dev/null +++ b/src/content/blog-metas/524.json @@ -0,0 +1,3 @@ +{ + "postDate": "2021-12-19T01:22:00+09:00" +} diff --git a/src/content/blog-metas/548.json b/src/content/blog-metas/548.json new file mode 100644 index 0000000..3162e5a --- /dev/null +++ b/src/content/blog-metas/548.json @@ -0,0 +1,3 @@ +{ + "postDate": "2021-12-21T09:33:00+09:00" +} diff --git a/src/content/blog-metas/567.json b/src/content/blog-metas/567.json new file mode 100644 index 0000000..a682ac1 --- /dev/null +++ b/src/content/blog-metas/567.json @@ -0,0 +1,3 @@ +{ + "postDate": "2021-12-21T23:29:00+09:00" +} diff --git a/src/content/blog-metas/590.json b/src/content/blog-metas/590.json new file mode 100644 index 0000000..5f63603 --- /dev/null +++ b/src/content/blog-metas/590.json @@ -0,0 +1,3 @@ +{ + "postDate": "2021-12-22T23:16:00+09:00" +} diff --git a/src/content/blogs/436.mdx b/src/content/blogs/436.mdx new file mode 100644 index 0000000..12b85bd --- /dev/null +++ b/src/content/blogs/436.mdx @@ -0,0 +1,54 @@ +--- +title: Blender と競プロの講習会を開催 +description: | + 5/8 (土) に Blender による 3D モデリング、5/9 (日) に競技プログラミングの講習会を Discord 新歓サーバーを用いてオンラインで実施しました。 +author: member +tags: [] +--- +import Image from "@/components/common/Image.astro" +import Blender_1 from "./436/Blender_1-1024x616.png" +import Blender_2 from "./436/Blender_2-1024x617.png" +import Blender_3 from "./436/Blender_3-1024x616.png" +import Blender_4 from "./436/Blender_4-1024x617.png" +import Blender_5 from "./436/Blender_5-576x1024.jpg" +import image_4 from "./436/image-4-1024x576.png" +import image from "./436/image-1024x576.png" +import image_1 from "./436/image-1-1024x576.png" +import image_2 from "./436/image-2-1024x576.png" +import image_3 from "./436/image-3-1024x576.png" + +
5/8 (土) に Blender による 3D モデリング、5/9 (日) に競技プログラミングの講習会を Discord 新歓サーバーを用いてオンラインで実施しました。
+ +約 90 分間という短時間で、VRChat で使える Avatar 制作の流れを学びました。短時間制作であることからポリゴンや着色などが荒くなっていますが、それでも様々な必須技術を学ぶことができました。
+ +阪大競技プログラミング部 RAINBOU の部長を務めるこたまねぎ(Twitter: @small_onions)氏に、特別に講習会を開いていただきました。テーマは「全探索攻略」で、バグを減らすためのマクロ定義や文字列化 bit 全探索の活用、また C++ ライブラリの活用など、競プロに最前線で取り組んでいる方による様々なノウハウやアドバイスなどはとても新鮮で、競プロをそれなりにやっている受講者にとっても新たな発見がありました。
+ +ご協力くださったこたまねぎ氏に感謝です!今後も、同じ志を持つ別団体との交流を進めていきたいですね。
+ +次は 5/15 (土) 15:00 に Git、5/9 (日) 14:00 にオブジェクト指向プログラミングの講習会を、同じく Discord 新歓サーバーで予定しています。興味のある方は https://discord.gg/jBM2NP7ZxK からご参加ください。なお、最新情報は Discord 内及び新歓特設サイトでも紹介していますので、こちらもご確認ください。
diff --git a/src/content/blogs/436/Blender_1-1024x616.png b/src/content/blogs/436/Blender_1-1024x616.png new file mode 100644 index 0000000..44bbb75 Binary files /dev/null and b/src/content/blogs/436/Blender_1-1024x616.png differ diff --git a/src/content/blogs/436/Blender_2-1024x617.png b/src/content/blogs/436/Blender_2-1024x617.png new file mode 100644 index 0000000..8eb2230 Binary files /dev/null and b/src/content/blogs/436/Blender_2-1024x617.png differ diff --git a/src/content/blogs/436/Blender_3-1024x616.png b/src/content/blogs/436/Blender_3-1024x616.png new file mode 100644 index 0000000..6c7dfd6 Binary files /dev/null and b/src/content/blogs/436/Blender_3-1024x616.png differ diff --git a/src/content/blogs/436/Blender_4-1024x617.png b/src/content/blogs/436/Blender_4-1024x617.png new file mode 100644 index 0000000..2cc10f5 Binary files /dev/null and b/src/content/blogs/436/Blender_4-1024x617.png differ diff --git a/src/content/blogs/436/Blender_5-576x1024.jpg b/src/content/blogs/436/Blender_5-576x1024.jpg new file mode 100644 index 0000000..7d923f5 Binary files /dev/null and b/src/content/blogs/436/Blender_5-576x1024.jpg differ diff --git a/src/content/blogs/436/image-1-1024x576.png b/src/content/blogs/436/image-1-1024x576.png new file mode 100644 index 0000000..503ed76 Binary files /dev/null and b/src/content/blogs/436/image-1-1024x576.png differ diff --git a/src/content/blogs/436/image-1024x576.png b/src/content/blogs/436/image-1024x576.png new file mode 100644 index 0000000..cecaaf7 Binary files /dev/null and b/src/content/blogs/436/image-1024x576.png differ diff --git a/src/content/blogs/436/image-2-1024x576.png b/src/content/blogs/436/image-2-1024x576.png new file mode 100644 index 0000000..97e84e1 Binary files /dev/null and b/src/content/blogs/436/image-2-1024x576.png differ diff --git a/src/content/blogs/436/image-3-1024x576.png b/src/content/blogs/436/image-3-1024x576.png new file mode 100644 index 0000000..c75c2c3 Binary files /dev/null and b/src/content/blogs/436/image-3-1024x576.png differ diff --git a/src/content/blogs/436/image-4-1024x576.png b/src/content/blogs/436/image-4-1024x576.png new file mode 100644 index 0000000..8ac9275 Binary files /dev/null and b/src/content/blogs/436/image-4-1024x576.png differ diff --git a/src/content/blogs/452.md b/src/content/blogs/452.md new file mode 100644 index 0000000..ad9393c --- /dev/null +++ b/src/content/blogs/452.md @@ -0,0 +1,68 @@ +--- +title: Git と OOP の講習会を開催 +description: | + Git 講習会 + Git は分散型バージョン管理システムで、近年のソフトウェア開発で頻繁に利用されるほか、複数人開発では必須ツールとなっています。仕組みが複雑で初心者にはとっつきにくいのが難点ですが、使いこなせればソフトウェア開発を力強くサポートしてくれるとても便利なツールです。 +author: member +tags: [] +--- + + +5/15 (土) に SourceTree と GitHub による Git 講習会、5/16 (日) に TypeScript を用いたオブジェクト指向プログラミング (OOP) の講習会を Discord を用いてオンラインで開催しました。
+ + + +Git は分散型バージョン管理システムで、近年のソフトウェア開発で頻繁に利用されるほか、複数人開発では必須ツールとなっています。仕組みが複雑で初心者にはとっつきにくいのが難点ですが、使いこなせればソフトウェア開発を力強くサポートしてくれるとても便利なツールです。今回は、初学者にも比較的扱いやすい SourceTree という GUI ソフトウェアを用いて、Git を扱うのに最低限必要な技能を身に着けることに重点を置きました。
+ + + +![](./452/Git_1-1024x576.png) + + + +![](./452/Git_2-1024x575.png) + + + +![](./452/Git_3-1024x577.png) + + + +![](./452/Git_4-1024x576.png) + + + +オブジェクト指向は「関数と型の関連付け」と「抽象化」を目的としたもので、「カプセル化」「継承」「多相」が主な特徴となります。近年はソフトウェアのメンテナンス性を重視する傾向が強まってきており、そういった点で合理的な OOP が広まっています。また、この考え方を取り入れた言語も数多く存在します。しかし、これもまた初学者にはとっつきにくいものであることから、今回は入門編としてその目的や定義を紹介したのち、TypeScript を題材として実際の実装例を確認しました。
+ + + +![](./452/OOP_1-1024x576.png) + + + +![](./452/OOP_2-1024x576.png) + + + +![](./452/OOP_3-1024x576.png) + + + +![](./452/OOP_4-1024x576.png) + + + +次は 5/22 (土) に Python、6月初めに Linux の講習会を、同じく Discord 新歓サーバーで予定しています。興味のある方は https://discord.gg/jBM2NP7ZxK からご参加ください。なお、最新情報は Discord 内及び新歓特設サイトでも紹介していますので、こちらもご確認ください。
+ diff --git a/src/content/blogs/452/Git_1-1024x576.png b/src/content/blogs/452/Git_1-1024x576.png new file mode 100644 index 0000000..30e7cee Binary files /dev/null and b/src/content/blogs/452/Git_1-1024x576.png differ diff --git a/src/content/blogs/452/Git_2-1024x575.png b/src/content/blogs/452/Git_2-1024x575.png new file mode 100644 index 0000000..06cb883 Binary files /dev/null and b/src/content/blogs/452/Git_2-1024x575.png differ diff --git a/src/content/blogs/452/Git_3-1024x577.png b/src/content/blogs/452/Git_3-1024x577.png new file mode 100644 index 0000000..f18d439 Binary files /dev/null and b/src/content/blogs/452/Git_3-1024x577.png differ diff --git a/src/content/blogs/452/Git_4-1024x576.png b/src/content/blogs/452/Git_4-1024x576.png new file mode 100644 index 0000000..8a99b9b Binary files /dev/null and b/src/content/blogs/452/Git_4-1024x576.png differ diff --git a/src/content/blogs/452/OOP_1-1024x576.png b/src/content/blogs/452/OOP_1-1024x576.png new file mode 100644 index 0000000..f3313d7 Binary files /dev/null and b/src/content/blogs/452/OOP_1-1024x576.png differ diff --git a/src/content/blogs/452/OOP_2-1024x576.png b/src/content/blogs/452/OOP_2-1024x576.png new file mode 100644 index 0000000..5a6472a Binary files /dev/null and b/src/content/blogs/452/OOP_2-1024x576.png differ diff --git a/src/content/blogs/452/OOP_3-1024x576.png b/src/content/blogs/452/OOP_3-1024x576.png new file mode 100644 index 0000000..19c9fc4 Binary files /dev/null and b/src/content/blogs/452/OOP_3-1024x576.png differ diff --git a/src/content/blogs/452/OOP_4-1024x576.png b/src/content/blogs/452/OOP_4-1024x576.png new file mode 100644 index 0000000..7012199 Binary files /dev/null and b/src/content/blogs/452/OOP_4-1024x576.png differ diff --git a/src/content/blogs/465.md b/src/content/blogs/465.md new file mode 100644 index 0000000..d483c2b --- /dev/null +++ b/src/content/blogs/465.md @@ -0,0 +1,29 @@ +--- +title: Python 講習会を開催 +description: | + 5/22 (土) に Python 3 の講習会をオンライン開催しました。 + + Python は C/C++ のような言語よりも手軽に扱えることから多くの人に好まれている言語です。また、統計処理や機械学習系のライブラリが充実しており、その分野でも広く使われています。今回の講習会では、Python が持つ基本的な機能を網羅的に解説し、AtCoder Beginners Selection で演習することで、Python を活用できるようになることを目標としました。 +author: member +tags: [] +--- + +5/22 (土) に Python 3 の講習会をオンライン開催しました。
+ +Python は C/C++ のような言語よりも手軽に扱えることから多くの人に好まれている言語です。また、統計処理や機械学習系のライブラリが充実しており、その分野でも広く使われています。今回の講習会では、Python が持つ基本的な機能を網羅的に解説し、AtCoder Beginners Selection で演習することで、Python を活用できるようになることを目標としました。
+ +![](./465/Python_1-1024x576.png) + +![](./465/Python_2-1024x576.png) + +![](./465/Python_3-1024x576.png) + +![](./465/Python_4-1024x576.png) + +![](./465/Python_5-1024x576.png) + +資料は Discord で配布していますので、今回参加できなかった方もその資料で学習可能です!
+ +次は6月初めに Linux の講習会、そして 5/29 - 6/26 にチーム開発イベントを同じく Discord 新歓サーバーで予定しています。興味のある方は https://discord.gg/jBM2NP7ZxK からご参加ください。なお、最新情報は Discord 内及び新歓特設サイトで紹介していますので、こちらもご確認ください。
diff --git a/src/content/blogs/465/Python_1-1024x576.png b/src/content/blogs/465/Python_1-1024x576.png new file mode 100644 index 0000000..5b223d8 Binary files /dev/null and b/src/content/blogs/465/Python_1-1024x576.png differ diff --git a/src/content/blogs/465/Python_2-1024x576.png b/src/content/blogs/465/Python_2-1024x576.png new file mode 100644 index 0000000..66b1087 Binary files /dev/null and b/src/content/blogs/465/Python_2-1024x576.png differ diff --git a/src/content/blogs/465/Python_3-1024x576.png b/src/content/blogs/465/Python_3-1024x576.png new file mode 100644 index 0000000..d12275a Binary files /dev/null and b/src/content/blogs/465/Python_3-1024x576.png differ diff --git a/src/content/blogs/465/Python_4-1024x576.png b/src/content/blogs/465/Python_4-1024x576.png new file mode 100644 index 0000000..0b0946c Binary files /dev/null and b/src/content/blogs/465/Python_4-1024x576.png differ diff --git a/src/content/blogs/465/Python_5-1024x576.png b/src/content/blogs/465/Python_5-1024x576.png new file mode 100644 index 0000000..107e451 Binary files /dev/null and b/src/content/blogs/465/Python_5-1024x576.png differ diff --git a/src/content/blogs/487.mdx b/src/content/blogs/487.mdx new file mode 100644 index 0000000..97b5bf4 --- /dev/null +++ b/src/content/blogs/487.mdx @@ -0,0 +1,89 @@ +--- +title: ゲームや動画等の演出の話 (雑) +description: | + OUCC Advent Calender 2021 16日目の記事です。 執筆者: ちょくぽ + 前回はShiokaiさんの GrabPassで取得したテクスチャが意外と後まで使える でした。 + + 演出関連の気づきを、自分用にメモするくらいの気持ちで書いていきます。 + これは特別演出の勉強などはしていない、一般趣味クリエイターによる記事です。読者としてポートフォリオを作るような方々ではなく、一般人を想定しています。 +author: member +tags: [advent-calendar] +--- +import Image from "@/components/common/Image.astro" +import Screenshot from "./487/スクリーンショット-2021-12-15-152205-1024x719.png" + +OUCC Advent Calender 2021 16日目の記事です。 執筆者: ちょくぽ
前回はShiokaiさんの GrabPassで取得したテクスチャが意外と後まで使える でした。
演出関連の気づきを、自分用にメモするくらいの気持ちで書いていきます。
これは特別演出の勉強などはしていない、一般趣味クリエイターによる記事です。読者としてポートフォリオを作るような方々ではなく、一般人を想定しています。
特殊演出や凝った編集のような話ではありません。普段コンテンツを見る側として気にも留めていなかった、しかし制作側は知っておかないと作れない、そんなことが中心です
+ +基本的には目立たせたい所にコントラストを使い、色相・明度・彩度に差を出します。これは広く知られていることかと思います。しかし、実際に三要素全てで差を出すと強烈になりすぎます。メイン(キャラや障害物等、ゲームプレイに関係のあるもの)と比較して背景は明度で差を、敵や弾と主人公とは色相で差を出し(例.2Pカラー)、主人公等見て欲しいものにより高い明度・彩度を使う(≒光を当てる)ことで目立たせる等が常套手段。
+ +逆に単一オブジェクトの中では三要素全てをある程度まとめるべきです。特に背景はぼかしてでも1~3色程度にまとめましょう(敵の弱点やギミック等は見て欲しいものなのでこの限りでない)。 単一オブジェクト内では、下画像のように使用色がパレット上で一直線に並ぶようにするとまとまりが良いです。色相を少しだけ変えると汚くなりにくい。アクセントの色はむしろ外れる方がキャッチーかも。
+ +確かに使用色がばらけるほど目立ちますが、ゲームや動画・キャラデザの文脈では目立ちすぎると目が疲れる・悪目立ちといった印象になるので、メイン色範囲(直線)1本、アクセント1,2色程度に留めましょう。
+ ++ +
ビジュアルノベルやRPG(アクションでない)等では、逆に雰囲気を重視し環境光などでキャラをなじませることがよくあります。書いてあることと逆じゃないかと思うかもしれませんが、このときは背景美術や音楽などもっと目立たせたいものが他にあることや、キャラの実在感を出すためということもあります。後者の場合、光を当てたり視点誘導などでメインが目立つようにしています。
+ +動画や広告等でも同じことが言えます。字幕を縁取りすることはコントラストを作り目立たせる手法として一般的です。また、赤色の特徴である購入意欲向上や、信頼感の青色、明るい気分の黄色など色の特徴を使うこともあります。
+ +いら〇とやなどを使うときは当然他の素材と競合しないようにするべきです。い〇すとや等イラスト素材は、それ単体でメインになる程度の情報量(≒色の多さ、十分な明るさ、三要素のばらつき具合)を持っています。文章だけの掲示に彩りを与えるには良いですが、他にメインとなる画像素材がある場合、いらす〇やは実は邪魔かもしれないのです。
+ +イージング最高!イージング最高!イェイイェイ!
+ +すべてのUI、ズームイン/アウト、表示などに、親の仇のようにイージングを使いましょう。イージングとは、簡単に言うと加減速のことです。
+ +アイコンやボタンなどの表示はEase-In-Outがいいでしょう。最初に加速、最後に減速です。いきなりアイコンが動くとユーザーが驚くし、急に停止すると不自然な上にフリーズか仕様か分かりません。加速度の絶対値が小さすぎるとのっそりもっそりしてしまうので、すぐに最高速度に達するようにしましょう。
+ +ボタンを押したとき等、ユーザーが能動的に操作するとき、その演出にはEase-Outを使いましょう。最初からトップスピード、最後に減速です。ユーザーが触れた瞬間に動き出すので、クリックにより"弾いた"感があり、操作している感が出ます。
+ +*直線移動、Ease-in-out、Ease-outの例をGIF画像で作ったがこのブログ.gif対応してない*
+ +ぶっちゃけ動きの演出なんて無限通りあります。イージングはいついかなる場所でも大体通用しますが、エフェクトはそう簡単ではありません。
+ +使用するエフェクトは世界観ごとに、前もってある程度まで限定しておきましょう。
サイバーな世界ではグリッチやモザイク、発光などを多用し、ポップな世界ではバウンド、いったん拡大縮小しすぎて戻るやつなどを多用します。アイコンはもちろん、キャラクターの動きや字幕までエフェクトを統一すると、より世界観を演出できます。
ゲームに限った話ではありません。業務用ソフトのUIや動画にも世界観というものはあります。UIに明るい世界観を与えると、ユーザーフレンドリーな感じになります。
+ +一瞬色を反転させる、拡大縮小と共にフェードインさせる、明度が高い所だけを先に描画し印象付ける、など世界観を持たない演出は便利に使えますし、他の演出と組み合わせることもできます。無限です。ここはもう製作者の好みの話です。
+ +余白を上手く使うことができる人は強いです
+ +イラストを描く人なら知っているかもしれませんが、キャラが向いている方向に空間があると、安定して良く見えます。逆にキャラの背後に空間があると不安を煽り、キャラの頭上に空間を大きく取ると開放感を与えます。また、キャラが前を向いていると未来を、振り返っていると過去を、カメラと目が合うと元気さを、カメラと目が合わないと不思議を演出します。
+ +視点誘導の方法も様々です。見て欲しいものをキャラが見ている方向に置いたり、光を当てたりすると目立ちます。窓枠やその他物などで囲いを作り、中に見て欲しいものを置くのもありです。(ただし、四角形の中に物を入れるのは不安感を煽る手法でもあります)
+ +先ほどの四角の他に、画面を傾けたり(Dutch angle)、重要なものの一部をあえて画面外へやることでも不安感を演出できます。未知や不安定は怖いものです。
+ +画面上の適当な三角形の領域に見て欲しいものを収める構図は躍動感を与えます。(丸の場合は安定感を出します) 広く知られていながら、常に強力な構図です。*三角構図*
同様に、画面を3×3分割し、その交点上 or 線上に見て欲しいものを置く(≒ド真ん中を避ける)のも魅力的です。*三分割法*
広告の文脈では、人間は左上→右下で視点を動かす癖があるので、これを意識した配置にするのがおススメです。街中の広告でも、見出しが左上に書いてあることが多いかと思います。(縦書きの場合右上→左下)
+ +当たり前に聞こえるかもしれませんが、大きいものは目立ちます。文字や画像に大小をつけるということは優先順位を定義することであり、ユーザーはどれから見れば良いのかが分かります。逆に大小がないとユーザーにストレスがかかり、読まれません。動画やゲームでもそうです。ボスの登場時はボスにカメラを寄せて強敵感を出しますし、エフェクトが派手で大きいと印象に残ります。
+ +金銭的理由からフリー音源を使いがちな趣味クリエイターには辛いことですが、SEとBGMはそのコンテンツの世界観の半分を決定します。神ゲーと言われるインディーゲームのほとんどはBGMやSEに信じられないほどの情熱を注いでいます。
+ +詳しくは触れませんが、当然ながら、音楽は強烈な世界観を持ちます。調や進行だけでなく、音源やリバーブですら世界観を演出します。SEもまた世界観を持ちます。
+ +音楽と絵の世界観は、不気味さを演出するのでない限りは合わせるべきです。が、これがなかなか難しい。特定の世界観を持たない演出を多用すれば音楽に合いはしますが、個性が潰れます。DTMを嗜む御仁や絵の描ける御仁は、自分の手の届かない、素材を使うしかない領域を先に作り、その世界観に合わせて柔軟に制作をしてみてはいかがでしょう。
+ +コンテンツ内容とエフェクト、音楽と絵のように、複数の要素間で世界観を共有するのは非常に難しいことです。ディレクターの大事な役割の一つは、世界観を開発メンバーと共有し調節することなのでしょう。ここがアマチュアとプロの境界であり、マルチクリエイターの強みでもあるかと思います。
+ +さいごに、細かい設定を練った末に出てくる些細なこだわりはオタクの心をくすぐる神演出になるものです。裏の設定を練りましょう。舞台裏を、世界を想像しましょう。
+ +OUCC Advent Calender 2021 次回は izumi104 さんです!
diff --git "a/src/content/blogs/487/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-15-152205-1024x719.png" "b/src/content/blogs/487/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-15-152205-1024x719.png" new file mode 100644 index 0000000..6a1d28f Binary files /dev/null and "b/src/content/blogs/487/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-15-152205-1024x719.png" differ diff --git a/src/content/blogs/490.mdx b/src/content/blogs/490.mdx new file mode 100644 index 0000000..39bcb34 --- /dev/null +++ b/src/content/blogs/490.mdx @@ -0,0 +1,63 @@ +--- +title: テトリスの電子辞書移植 +description: | + 執筆者: watamario15 + + これは OUCC Advent Calendar 2021 の14日目の記事です。前日の記事は...おかしいなぁ誰もいないぞ?w 明日の記事は shiokai が担当します。 + + さて、何を書きましょうか。マジでネタがありません。何を隠そう今まさに12月14日23:22です。 +author: member +tags: [advent-calendar] +--- +import Image from "@/components/common/Image.astro" +import Pic from "./490/P_20210501_231913.jpg" + +執筆者: watamario15
+ +これは OUCC Advent Calendar 2021 の14日目の記事です。前日の記事は...おかしいなぁ誰もいないぞ?w 明日の記事は shiokai が担当します。
+ +さて、何を書きましょうか。マジでネタがありません。何を隠そう今まさに12月14日23:22です。今年は大量の課題やら部室の引っ越しやらノーキャリアの学祭やら Brain Wiki の整備やらの事務的なことが多く、個人でプログラムを書く時間をあまり取れなかったのです(そういえば、今年から Brain Wiki の Admin になりました)。情報科学科なら講義でプログラムを書くのでは?と思うかもしれませんが、はっきり言ってあんなのおまけで数学や回路設計の方がはるかに workload が高いです。というか、プログラミングの講義自体レポートを書く部分が本質みたいなところあります。つらい。
+ +うーんどうしようか、そういえばギリギリ今年のはじめに OB の方が作ったテトリスを電子辞書に移植するのやってたな、あれの流れと宣伝でも書いとくか(ここでようやくタイトル欄を埋める)。
+ +さて、電子辞書とは言っても明確な機種を指定していませんでしたね。機種は SHARP のカラー電子辞書 Brain シリーズです。ただし、2021年発売のモデル以降は見た目こそほぼ変わりませんが中身が全く違うので対象としません。昨年の私の記事で、実際に作り方を説明していますので興味があれば見ていってください。
+ +まず、なぜ移植しようと思ったのか。それは突如として OB さんの1人が
+ ++ +「最近win32apiでテトリスを実装しました。」
という投稿と共に OUCC の Discord (内部サーバーで、当時はこちらがメインの活動場所だった)でテトリスを添付されたことが始まりです。何という奇遇でしょうか。WinCE が動く SHARP Brain は、ライブラリこそ碌に流通していませんが Win32 API の subset を利用することができます(詳細は昨年の記事)。そして、その完成度の高さにも驚きました。結構昔から電子辞書で動くテトリスは実はあったのですが、それはモノクロで乱数も seed 値が全く同じでパターンが変化しない、とても単純なものでした。
+ +「これは移植すると面白いかもしれない」+ +
そうして、移植が始まったのでした。
+ +本当は詳しく書きたいものですが、何しろ今 23:38 です。時間がありません。概況だけ書きます。
+ +まず、最初の状態でそのまま CeGCC に掛けるとしっかりエラーになりました。まあ、そうなりますよね。想定内です。あくまで subset の API しかサポートしないので、そのまま動くなんぞ甘い期待は禁物です。
+ +まず、1つは menu bar の仕様違いです。ここは WinCE をやるときの1つの沼で、私もかつて知るまではずっと何がダメなのか分からなかったし、分かっても仕様がどこを調べても書いていないので苦労しました。CE はモバイル用 OS で、それゆえ画面領域が貴重です。狭い範囲に最大限の情報を詰め込むため、×ボタンなどの並びと menu bar を共通にできる command bar が導入されています。なので、これに置き換える必要があるのです。とはいえ、この苦労は既に1年前に経験したものですから、簡単に切り抜けました。
+ +あ^~もう 23:46 じゃないか!!やばい!!
+ +次はレイアウトの問題です。何か酷いことになってたんですよねこの段階では。これも command bar の仕業です。通常 Windows なら menu bar は描画範囲外ですが、何と CE では範囲内です。なので、その分画面全体を下にずらさなければなりません。いやぁとんだ沼ですね。しかも、幅はさすがに取得する API があるのですが画面が出てからしか使えません。よって、ウィンドウサイズを起動した後に変えるような仕様変更をすることになりました。
+ +ここが一番苦労した部分です。なぜか適切に描画されなくなる問題が生じて、あれやこれやと色々試す沼にはまりました。時間も無いので (23:54) 結果だけ書いてしまうと、電子辞書の超低スペックでもまともに動くようにするために FPS を落としたとき、プログラム仕様をよく分かっておらず「やってはいけない」設定変更を実施したことによるものでした。悲しいですね。
+ +https://github.com/OUCC/tetris
+ +何はともあれ一応動くものは完成しました。上記の GitHub Repository に置いてあるので、対象機種をお持ちの方はぜひ遊んでみてください(くれぐれも先生の前でやって没収されぬよう...)。ただ、割と高度な音声処理が組み込まれているらしく、そのせいか電子辞書では結構もっさりします(十分遊べますが)。あと、電子辞書版が遊ばれる状況を考慮して初期状態では音量が0になっています。右のスライダーやページ送りボタンで音量を上げると、効果音付きで遊べますので是非お試しください。
+ +(あー10分超過したッ!!許せッ!!)
diff --git a/src/content/blogs/490/P_20210501_231913.jpg b/src/content/blogs/490/P_20210501_231913.jpg new file mode 100644 index 0000000..c8ecd65 Binary files /dev/null and b/src/content/blogs/490/P_20210501_231913.jpg differ diff --git a/src/content/blogs/512.md b/src/content/blogs/512.md new file mode 100644 index 0000000..db6f2da --- /dev/null +++ b/src/content/blogs/512.md @@ -0,0 +1,67 @@ +--- +title: GrabPassで取得したテクスチャが意外と後まで使える +description: | + 執筆者: Shiokai + + はじめに + この記事は、OUCC Advent Calendar 2021の15日目の記事です(投稿日がずれているのは気にしない)。前回はwatamario15さんのテトリスの電子辞書移植でした。 + またこの記事はUnityのShaderのGrabPassに関する内容です。 +author: member +tags: [advent-calendar] +--- + + +執筆者: Shiokai
+ + + +この記事は、OUCC Advent Calendar 2021の15日目の記事です(投稿日がずれているのは気にしない)。前回はwatamario15さんのテトリスの電子辞書移植でした。
またこの記事はUnityのShaderのGrabPassに関する内容です。
シェーダーを触ったことのある人なら大抵一度は触ってみたくなる(よね?)GrabPassではありますが、Unityのドキュメントにはわずか1ページの説明しかありません。その中に、GrabPassで取得したテクスチャ(以下GrabTex)は「後続のパス」で使用できるとあります。この「後続のパス」というのが肝で、私は当初同じシェーダー(SubShader)内で後に来るパスのことを指しているのかと思っていました。
+ + + +ところがある日Twitterを見ていると、異なるシェーダーでもGrabTexが使用できるといった内容のツイートを見かけました(何方のツイートか分からなくなってしまってリンクが貼れない……)。これは試さねばと思い、GrabPassだけをするシェーダーと、GrabTexを貼るだけのシェーダーを書いてみると、なんと確かに異なるシェーダーでもGrabTexが使えているではありませんか!
+ + + +さらにもう少し触ってみると、GrabPassが呼ばれてから、再度同じ名前のGrabTexでGrabPassが呼ばれるまでの間であれば、初めのGrabTexがどんなシェーダーからでも使える様でした。GrabPassが呼ばれるタイミングは通常のPassと同様にRenderQueueと前後関係による(はずな)ので、単純にRenderQueueがGrabPassより後ならGrabTexがそのまま使えてしまうことになります。
+ + + +更に、GrabPassとGrabTexを使うシェーダーのRenderQueueを逆転してみたところ、なんと前のフレームのGrabPassで取得したと思しきGrabTexが使用できてしまいました。ただ、その場合オブジェクトを動かすかどうかでうまく描画できなくなることもあったので、実用に耐えうるかどうかは怪しいものですが。
これを見るに、GrabTexが使える「後続のパス」は、時系列的に後であれば本当に何でもいいようです。
注意点としては、GrabPassをしているシェーダーがカリングされてしまうとGrabTexを使用している側には意図しないテクスチャ(たいてい灰色一色)が渡されることになるので、オブジェクトの配置やBoundsには気を付ける必要があるでしょう。
+ + + +GrabTexが他のシェーダーで使えることでどういった表現ができるようになるかと言われると……正直自分にはさっぱり何も思いつきません。例えばオブジェクトの座標を色情報にしてシェーダー間で受け渡しできたりはしますが、それはGPUInstancingを使った既存の手法もありますし、何よりスクリプトが使えれば簡単にできることで、では他にわざわざ他のシェーダーからGrabTexを持ってきてするようなことがあるかというと……。この記事を読んだ方が何か素晴らしいアイデアを実現してくれるといいなぁ。
+ + + +ゴミみたいな文章が出来上がってしまった……
+ + + +OUCC Advent Calendar 2021、次回の担当者はちょくぽさんです。
+ diff --git a/src/content/blogs/522.md b/src/content/blogs/522.md new file mode 100644 index 0000000..e088815 --- /dev/null +++ b/src/content/blogs/522.md @@ -0,0 +1,146 @@ +--- +title: パワポを動画にしようとしてみた +description: | + はじめに + この記事は、OUCC Advent Calendar 2021の18日目の記事です。前回はAreiさんのハンドヘルドコンピュータの製作と展望でした。 今回はPower Pointのスライドショーを動画に変換しようとしてみました。 +author: member +tags: [advent-calendar] +--- + +## はじめに + +この記事は、[OUCC Advent Calendar 2021](https://adventar.org/calendars/6722)の18日目の記事です。前回はAreiさんの[ハンドヘルドコンピュータの製作と展望](http://arei1126.ddns.net/other/handheld/handheld.html)でした。 今回はPower Pointのスライドショーを動画に変換しようとしてみました。 + +## やり方 + +音声付きスライドを考えると動画を作るためには画像と音声が必要です。しかし、pptxファイルやppsxファイルから直接画像や音声を取り出すことのできるライブラリはありませんでした。 + +まずは音声ファイルの抽出から行うことにしました。pptxを含むoffceファイルは中身はただのzipファイルなのでos.Rename()を使ってファイル形式を変え、zipfileライブラリで開くことで中の情報に直接アクセスできます。音声ファイルがあるのは ppt/media のディレクトリで、どの音声がどのスライドに紐づけられているのかというのは ppt/slides/_rels にあるrelsファイルに書いてあります。relsファイルはxmlファイルなのでこれもos.Rename()でファイル形式を変えて扱います。そこから音声ファイルとスライドの関連情報が得られ、音声ファイルの準備は完了します。 + +次に画像ファイルの作成ですが、現状pptxから自力で画像を作ること大変難しいのでPower Pointアプリを起動し、画像をエクスポートさせます。これはcomtypesライブラリを用いることで実現しました。 + +最後にこれらをまとめるのですがこれにはffmpegというコマンドライン上から動画編集ができるソフトをいれ、python上でそのコマンド実行するというゴリ押しの方法で行いました。 + +## 作っている途中で気づいたこと + +**Power Pointのエクスポートに動画に出力する機能があり、自作するより圧倒的に多機能であること** + +## それを知って + +デバッグする気力がなくなったため、途中からデバッグしてません。理論は分かったけど、もう動作させる理由がありませんでした。たぶん動かないと思います。 + + + +```python +import os +import re +import zipfile +import glob +from comtypes import client +import xml.etree.ElementTree as ET +import subprocess + +def getM4aPath(relsPath): + root = ET.fromstring(relsPath) + for child in root: + data = child.attrib["Target"] + print(data) + if re.match(".+\.m4a",data): + return "pptxZipTemp/voice/ppt/" + data.replace("../","") + return "" + +def generateMp4(relsPathList,pptxPath): + aviPathList = [] + concat = "concat:" + for index,relsPath in enumerate(relsPathList): + voicePath = getM4aPath(relsPath) + pngPath = "pptxZipTemp/images/slide{}.PNG".format(index) + aviPathList.append("pptxZipTemp/avi/temp{}.avi".format(index)) + subprocess.run("ffmpeg -loop 1 {} -i {} -vodec mpeg4 -acodec pcm_s16le -shortest {}".format(pngPath,voicePath,aviPathList[index]),shell=True) + concat = concat + aviPathList[index] + "|" + concat = re.sub(".+\|$","",concat) + pptxPath = pptxPath.split("/") + pptxPath = pptxPath[-1].split(".") + subprocess.run("ffmpeg -f concat -i {} -vcodec libx264 -acodec aac -pix_fmt yuv420p {}".format(concat,pptxPath[0])) + + +def zip2mp4(zipPath,pptxPath): + with zipfile.ZipFile(zipPath) as pptxZip: + inforLi = pptxZip.infolist() + voicePathList = [] + relsPathList = [] + for info in inforLi: + fname = info.filename + if re.match(".+\.m4a",fname): + voicePathList.append(fname) + elif re.match("ppt/slides/_rels/.+\.rels",fname): + relsPathList.append(fname) + print(fname) + for voiceIndex, voicePath in enumerate(voicePathList): + pptxZip.extract(voicePath, "pptxZipTemp/voice") + voicePathList[voiceIndex] = "pptxZipTemp/voice/" + voicePath + for relsIndex, relsPath in enumerate(relsPathList): + renamedRelsPath = relsPath.replace(".rels","") + pptxZip.extract(relsPath, "pptxZipTemp/rels/") + os.rename("pptxZipTemp/rels/"+relsPath, "pptxZipTemp/rels/"+renamedRelsPath) + relsPathList[relsIndex] = "pptxZipTemp/rels/" + renamedRelsPath + + generateMp4(relsPathList,pptxPath) + +def export_img(fname, odir): + application = client.CreateObject("Powerpoint.Application") + application.Visible = True + current_folder = os.getcwd() + + presentation = application.Presentations.open(os.path.join(current_folder, fname)) + + export_path = os.path.join(current_folder, odir) + presentation.Export(export_path, FilterName="png") + + presentation.close() + application.quit() + +def rename_img(odir): + file_list = glob.glob(os.path.join(odir, "*.PNG")) + for fname in file_list: + new_fname = fname.replace('スライド', 'slide') + os.rename(fname, new_fname) + +def getLines(path): + reg = '\.pp[s|t]x' + renamedPath = re.sub(reg,".zip", path) + print("match:") + print(renamedPath) + print(path) + if os.path.isfile(path): + try: + subprocess.run("mkdir pptxZipTemp",shell=True) + export_img(path,"pptxZipTemp/images") + rename_img("pptxZipTemp/images") + os.rename(path,renamedPath) + print("This path exists.") + print(renamedPath) + zip2mp4(renamedPath,path) + except OSError as e: + print("An OSError occured") + print(e) + finally: + os.rename(renamedPath,path) + print("終了しました") + else: + print(path+"は存在しないか、対応していません。") + +def main(): + while True: + print("scan:") + inputString = input() + if inputString == "exit": + break + else: + getLines(inputString) + + +if __name__ == "__main__": + main() + +``` diff --git a/src/content/blogs/524.mdx b/src/content/blogs/524.mdx new file mode 100644 index 0000000..07523a2 --- /dev/null +++ b/src/content/blogs/524.mdx @@ -0,0 +1,164 @@ +--- +title: 政府統計e-Statで学期末レポートを粉砕する +description: | + 執筆者:yuyu + + この記事はOUCC Advent Calendar 2021の19日目の記事です。前回はyuさんの「パワポを動画にしようとしてみた」でした。 + + 吐く息も白くなってきて、いよいよ令和も3年目を終え、はや4年目を迎えることに驚きを隠せておりません。 +author: member +tags: [advent-calendar] +--- +import Image from "@/components/common/Image.astro" +import Screenshot from "./524/スクリーンショット-2021-12-18-223020-1024x593.png" +import BunyaAka from "./524/分野に丸付けたやつ-1024x594.png" +import Kakei from "./524/家計調査-1024x594.png" +import ShosaiAka from "./524/詳細に赤丸-1024x594.png" +import UrlAka from "./524/URLに赤丸-1024x594.png" +import YogoAka from "./524/用語の解説に赤丸-1024x592.png" +import DatabaseAka from "./524/データベースに赤丸-1024x593.png" +import NenjiAka from "./524/年次に赤丸-1024x593.png" +import DbAka from "./524/DBに赤丸-1024x594.png" +import Fig3 from "./524/図3-1024x591.png" + +執筆者:yuyu
+ +この記事はOUCC Advent Calendar 2021の19日目の記事です。前回はyuさんの「パワポを動画にしようとしてみた」でした。
+ +吐く息も白くなってきて、いよいよ令和も3年目を終え、はや4年目を迎えることに驚きを隠せておりません。yuyuです。みなさんはいかがお過ごしでしょうか。私は下宿をしている身ですが、部屋に備え付けの暖房の効きが異常に悪く、毎日布団にくるまっているミノムッチ状態です。
+ + + +さて、今日は「政府統計の総合窓口」e-Statについて解説したいと思います。e-Statとは例えば「人口・世帯」、「労働・賃金」といった17の分野の政府による統計結果が集まったサイトです。具体的には国勢調査の結果や賃金構造基本統計調査(様々な業種の基本給を調査)の結果などが公表されています。URLはこちら。https://www.e-stat.go.jp/
+ + + +※この記事は主にデータ分析のために、あるいは基盤教養科目などのレポート課題で自身の主張を裏付けるために公的な統計結果が欲しい方向けです。例えば、法学部に所属している私なら、特に政治学の分野において適切な政策を考案するために日本の現状を知る手段の一つとしてe-Statを利用しています。
+ + + +あなたはこれまでの人生で公的な統計結果が欲しいと感じたことがありませんでしたか?高校で調べ学習を課されたり、大学の基盤教養科目でレポート課題を課されたり。往々にして「引用するデータは信頼のおける発信者のものにしなさい」と注文が来ます。信頼のおける発信者とは公的機関、特に政府機関です。とはいえピンポイントで見つけるのは難しいです。たいていの場合は省庁が出している報告書に引っ掛かる程度。
+ +そこで登場するのが我らがe-Statであり、これはありとあらゆる公的な統計調査結果を集約したサイトで、そこからさまざまな調査結果を調べ、データのダウンロード、ブラウザ上で表作成、グラフ作成が可能です。
+ +こんな便利なサイトがあるのに使いこなさないのはもったいない!!!ということで、今日は[冬季集中講義]e-Stat基礎論を開講します。安心してください、楽単ですよ。
+ + + +公的統計調査結果の効率的な収集です。そもそも、どのような統計調査が行われているのかを具体的に認識していないと単にブラウザで調べるという手法では限界があります。
+ + + +ついにこの記事の真打、e-Statの登場です。先述の通り、e-Statとは政府統計調査のポータルサイトです。ここを経由して様々な統計データにアクセスができます。ここでいったんe-Statの長所短所を確認しておきましょう。
+ + + +◇良いところ
+ +◇悪いところ
+ +こんなところです。べた褒めをしても政府の回し者に思われてしまいそうなので短所を出しておきましたが、個人的には気にならないかなと思っています。それは、デザインの問題であるという性質上、xlsx形式でダウンロードしてExcelを開いて自分で表やグラフを作成すれば済むことだからです。
+ + + +今回は「家計調査」を題材として説明していきたいと思います。
+ +(1)e-Statにアクセスする
+ +任意のWebブラウザで「e-Stat」と検索していただくと”e-Stat政府統計の総合窓口”にアクセスできると思います。(直リンは https://www.e-stat.go.jp/)
+ +(2)知りたい情報のキーワードを考える
+ +ここからお目当てのデータにたどり着くには「・統計データを探す」というところから「すべて」、「分野」、「組織」、キーワード検索の4通りの方法があります。基本的には探しやすい「分野」を用いるのが良いと思います。探し出せなければキーワード検索を使いましょう。
+ +今回の例として用いる題材は家計調査でしたね。つまり、キーワードは「家計」、「経済」です。まず分野を確認してみて、なければキーワード検索です。
+ +「企業・家計・経済」という分野の主な調査に掲載されている「家計調査」をクリックしましょう。
+ +(3)統計調査の詳細な内容確認
+ +クリックして次のページに進んだら当該統計調査の目的と内容が大まかに書かれているのがわかると思います。統計データを分析するには統計で用いられている用語の定義を確認することが非常に重要です。自分の考えていた意味とは全く異なる場合があります。統計調査名の右にある「詳細」をクリックしてください。
+ +すると担当機関名や課室名、連絡先などの情報がありますがそれらは無視して「ホームページURL」とあるのをクリックしてください。担当機関の当該統計調査に関するページに飛びます。
+ +ここには調査の概要や結果が載っています。この統計では総務省統計局のホームページですが、別の統計で担当機関が異なる場合でも同様に調査の概要を説明するページに飛びます。さて、最も重要なのは用語の定義です。調査の結果 > 用語の解説と進みます。
+ +可処分所得を例に確認します。
+ ++ +「実収入」から税金,社会保険料などの「非消費支出」を差し引いた額で,いわゆる手取り収入のことである。これにより購買力の強さを測ることができる。
用語の解説
実収入と非消費支出にカギ括弧がついていますが、これらの定義も同じページに説明があるので確認してみてください。
+ +(4)データ取得
+ +用語の定義を確認したらいよいよデータを取得します。(2)が終わった段階までページをさかのぼります。「データベース」と「ファイル」の2つが確認できるかと思います。
+ +このうち、「データベース」を選択した場合はブラウザ上で表の作成、グラフの作成ができます。単に内蔵データを確認したいならこちらを選択してください。一覧が出てくるので家計収支編 > 総世帯 > 年次を選び(図1)、続けて用途分類(総数)の全国の右にあるDBをクリックしてください(図2)。作成された表を閲覧できます(図3)。表をそのままダウンロードも可能です。APIは私自身がよくわからないので使っていません。
+ +一方、「ファイル」を選択した場合は Excelデータのダウンロードができます。
+ +(5)データ分析
+ +データを取得したら分析をして類似する別のデータを調べたりします。その場合は(1)からの手順を繰り返します。データ分析の手法は本題ではないので省略します。
+ + + +今回取り扱った統計調査は国が行ったものであって、その収集単位も国全体です。しかし都道府県別のデータなど、地方公共団体を単位とする統計調査データが欲しいときもあると思います。そんなときはe-Statのトップページから「・統計データを活用する」にある「地域」を選択してください。
+ + + +いかがでしたでしょうか。ここまでお付き合いくださりありがとうございます。次節のリンクに学習用サイトのリンクを貼っておくのでわからない部分があればそちらを参考にしてください。
+ +レポート課題のときだけでなく常日頃からさまざまな統計データに触れておくことで現政府の政策にある意図に気づくことができます。コロナ禍の今は皆さんも政府の動向にとりわけ注意を払っているはず。せっかくの機会ですからいろいろ考察してみると面白いかもしれないですね!
+ +OUCC Advent Calendar 2021 次回はtakuemonさんです!お楽しみに!
+ +執筆者:MrMocchy
+ +この文章はOUCCアドベントカレンダー2021の12/21のものです。
前回はtakuemonさんのMixamoのススメです。
これが自分のはじめてのブログ記事になります。
調べものの際によく出てくるブログをまねる感じで書くつもりです。
暖かい目でご覧ください。
自分はノートパソコンしか持っていないのですが、3Dゲームは重いのばっかりで興味をもったやつの多くは必要スペックを満たせずに断念していたりします。
しかし、ある程度のグラフィックでも快適に遊べるものもあります。まあゲーム性自体がシンプルだってのもありますが、その多くは(たぶん)ローポリです。
ローポリとは、ロー・ポリゴンの略で、少ないポリゴン(=面)でできた、ざっくり言えば精巧でない3Dモデルを形容する言葉です。
それを綺麗に見せるためにテクスチャやシェーダーに力を入れているようなのですが、本記事のメインはローポリです。
エンティティを大量に配置するゲームを作る際、クオリティより数を必要とする際、その他とにかく軽くしたい際、ローポリは非常に有効です。
+ +さて、ローポリについて話すとなれば何かの3Dモデルを用意する必要がありますが、なぜでしょうか、カメを作ろうと思いました。甲羅にポリゴン感があるからでしょうか。
「カメ 3Dモデル」などと検索してみてください。精巧なカメの画像がたくさん見つかると思います。手足や頭の曲線、皺、甲羅の凸凹感。重そうですね。
そこで自分が作ったカメがこちらです。
+ +シンプルですね。5分で作れそうです。15分ぐらいで作りました。
しかし、このモノクロでもカメ、それもリクガメでもウミガメでもない、ミドリガメのようなカメだと分かります。
画像の左上にあるのがこれの三角面数などの情報です。比較対象は後に出しますが、基本的にこれが少ない=データ量が小さい=描画が軽いということになります。
+ +ちなみに、もっとローポリにすることも可能です。それがこちら。
+ +もはやカメだとも言われなければ分からなさそう...ですかね?よく見ればカメだとは思いますが。
ですがテクスチャを設定するだけで、随分と分かりやすくなるものです。現に、2色のべた塗りでも、
ほら、カメです(断言)。
+ +先ほども述べましたが、モデルの精巧さだけでなく、このテクスチャにこだわることでもより正確なカメを表現することができます。
ただ、自分個人の意見としては、このような極端なローポリのモデルは、同じく極端に単純なモデル、パステルカラーなイメージの少ない色数といった感じのデザインで統一し、かわいい方向にした方が好きですね。
カメときたらウサギです。
+ +誰が見てもウサギ、かは分かりませんが、多くの人はウサギだと言ってくれるでしょう。
+ +これもさらにローポリにしようとしたのですが、なかなかうまいこと行きませんでした。
+ +とりあえず鼻先を小さくするとして、やはり胴体がネックですね()。これが限界な気がします。
+ +なので、逆に精巧に作ってみることにしました。
+ +なにかがおかしい。犬でもない。なにかこう、いそうでいないようなクリーチャーができました。
+ +できました。口の周りを膨らませたらウサギっぽくなりました。あとは草を咥えさせたら完全にウサギです。
色と背景を付けるとこうなります。
完成。
+ +ここで見てもらいたいのが、2つ上の画像の左上の数字。...潰れてますね。こちらです。
+ +そして先ほどのカメの数字をご覧ください。
+ +ローポリの偉大さが分かっていただけたのではないでしょうか。
+ +まとめ:ローポリは軽い。作るのは非常に楽。かわいい。
+ +ご覧いただきありがとうございました。
+ +次回のOUCCアドベントカレンダー2021は、Pres.UさんのOUCC Advent Calendar DAY21 Unityでゲーム作るRTA+おまけの謎解きです。
+ +上の3DモデルはBlenderというフリーソフトで作りました。完全フリーです。どこかの機能を使おうとしたら有料アップグレードを要求されることなんてありません。広告もありません。開発側はどうやって稼いでいるのでしょうか。
+ +ローポリモデル欲しい、けどモデリングしたくない人は
「○○ 3Dモデル フリー」とかで検索、ダウンロード⇒Blenderにインポート⇒モディファイアーを追加>デシメート⇒比率を調整
で簡単にポリゴンの削減ができるはずです。あまり削減しすぎると崩れてきますが。
そしてウサギの背景をもらってきたのはPoly Havenというサイトからです。そこのHDRIs(=360°画像)で入手することができます。このサイトではテクスチャや3Dモデルも無料で利用できます。IT業界の発展のための無償公開だそうです。非常にありがたいです。
+ +Blender:https://www.blender.org/
Poly Haven:https://polyhaven.com
執筆者:takuemon
これは OUCC Advent Calendar 2021 の20日の記事です。(なぜ記事を21日に記事が投稿されているんだ…おかしいぞ?…)前日(一昨日)の記事はyuyuさんの 政府統計e-Statで学期末レポートを粉砕する{' '} 、明日(今日)の記事はMrMocchyさんの ローポリのすゝめ です。
今回は、Unityでゲーム制作しているときに個人的にお世話になったサイトを紹介させていただきたいと思います。
URL: https://www.mixamo.com/#/
Mixamoはどんなサイトかといいますと、大量のキャラクターとモーションが無料で使い放題という慈善事業みたいなことしてるサイトです。ここではキャラクターをアップロードして、専用のモーションをダウンロードするまでを解説していきます。
1.アカウントを作る
青色のボタンをクリックしてアカウントをつくります。
右上のCharacterのタブをクリックすると大量のキャラクターをダウンロードできますが、今回は自分でキャラクターをアップロードします、UPLOAD CHARACTERをクリックしましょう。
するとこのウィンドウが表示されます。私はユニティちゃんのfbxファイルをアップロードしました。
テクスチャが貼られたモデルをアップロードしたい場合は、テクスチャとモデルを圧縮したzipファイルをアップロードしてください。
左下の頭蓋骨をおすと、ボーンが表示されます。NEXTをクリックします。
すると、こんな感じに警告文が表示されます(初見でちょっとビビった)が、全く問題ないので無視してNEXTをクリックしましょう。
これでユニティちゃんがアップロードされました! 左側のモーションをクリックすることで、ユニティちゃんにモーションを反映させることができます。例えば、
それではこれらのモーションをダウンロードしてみましょう。DOWNLOADをクリックします。
するとこのようなウィンドウが表示されますがそのままでDOWNLOADをクリックしてください。これでユニティちゃんのモーションがダウンロードされました。
いかがだったでしょうか? Unityで3Dゲームを作る時、キャラクターのモーションに悩まされることは多いと思います。そんなとき、Mixamoに頼ってみると、あなたの求めるキャラクターやモーションが手に入るかもしれません。気になった人は是非!
diff --git "a/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-215104-1024x440.jpg" "b/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-215104-1024x440.jpg" new file mode 100644 index 0000000..fea0b35 Binary files /dev/null and "b/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-215104-1024x440.jpg" differ diff --git "a/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-215538-1-1024x494.jpg" "b/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-215538-1-1024x494.jpg" new file mode 100644 index 0000000..5eeae5f Binary files /dev/null and "b/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-215538-1-1024x494.jpg" differ diff --git "a/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-221001-1-1024x492.jpg" "b/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-221001-1-1024x492.jpg" new file mode 100644 index 0000000..1de2348 Binary files /dev/null and "b/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-221001-1-1024x492.jpg" differ diff --git "a/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-222549-1.jpg" "b/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-222549-1.jpg" new file mode 100644 index 0000000..d683137 Binary files /dev/null and "b/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-222549-1.jpg" differ diff --git "a/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-222709-1.jpg" "b/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-222709-1.jpg" new file mode 100644 index 0000000..76da1de Binary files /dev/null and "b/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-222709-1.jpg" differ diff --git "a/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-223005-1.jpg" "b/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-223005-1.jpg" new file mode 100644 index 0000000..48c5f80 Binary files /dev/null and "b/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-223005-1.jpg" differ diff --git "a/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-224316-1-1024x495.jpg" "b/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-224316-1-1024x495.jpg" new file mode 100644 index 0000000..3d9ada7 Binary files /dev/null and "b/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-224316-1-1024x495.jpg" differ diff --git "a/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-224702-1.jpg" "b/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-224702-1.jpg" new file mode 100644 index 0000000..7fd05ef Binary files /dev/null and "b/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-224702-1.jpg" differ diff --git "a/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-225021-1.jpg" "b/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-225021-1.jpg" new file mode 100644 index 0000000..387502a Binary files /dev/null and "b/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-225021-1.jpg" differ diff --git "a/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-225709.jpg" "b/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-225709.jpg" new file mode 100644 index 0000000..1ed7edc Binary files /dev/null and "b/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-225709.jpg" differ diff --git "a/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-230131-1.jpg" "b/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-230131-1.jpg" new file mode 100644 index 0000000..88b04bf Binary files /dev/null and "b/src/content/blogs/567/\343\202\271\343\202\257\343\203\252\343\203\274\343\203\263\343\202\267\343\203\247\343\203\203\343\203\210-2021-12-21-230131-1.jpg" differ diff --git a/src/content/blogs/590.mdx b/src/content/blogs/590.mdx new file mode 100644 index 0000000..6222e35 --- /dev/null +++ b/src/content/blogs/590.mdx @@ -0,0 +1,77 @@ +--- +title: OUCC Advent Calendar DAY21 Unityでゲーム作るRTA+おまけの謎解き +description: | + 執筆者:Pres.U(近々ハンドルネーム変更予定) + この記事はOUCC Advent Calendar 2021の21日目の記事です(実質9日目)。前回(12/21)はtakuemonさんのMixamoのススメです。 + + 今回はUnityで2Dゲームをゼロから作りかつ記事を書くという無謀なRTAを行います。多分これが一番早いとは思いません。 +author: member +tags: [advent-calendar, unity] +--- +import Image from "@/components/common/Image.astro" +import osechi2 from "./590/osechi2.jpg" +import game1 from "./590/game1.png" +import result from "./590/2021-12-22-1-1024x683.png" + +執筆者:Pres.U(近々ハンドルネーム変更予定)
この記事はOUCC Advent Calendar 2021の21日目の記事です(実質9日目)。前回(12/21)はtakuemonさんのMixamoのススメです。
今回はUnityで2Dゲームをゼロから作りかつ記事を書くという無謀なRTAを行います。多分これが一番早いとは思いません。
ほかの皆さんの記事は実用性があり内容も素晴らしいのですが、わたくしの書く記事は実用性も糞もなく、TDNただの読んでくださる人および執筆者の時間潰しにすぎません。それでも楽しんで頂けると幸いです。
今回は、脱出ゲームを作ってみようと思います。
+ +まずはプロジェクトを作りましょう。Unity Hubから新規作成→2D→任意で名前変更→作成で作れます。
次に、画像を自作します。ペイントがおすすめです。
軽い謎を解いて鍵をゲットし部屋から脱出する感じです。
+ +
タイトル・本編・クリア画面の3つのシーンをSceneManagerを使って遷移させてやる感じです。また、アイテムの表示・非表示はオブジェクトの座標を画面外に移すことで疑似的に実行しています。
後でドライブにzipファイルを置いておきます。
+ +じつは実装しているうちに、GameObjectを非表示にするとアタッチしているスクリプトが無効になるといった仕様に悩まされ方針を変更せざるを得なくなりました。
また、最近Unityに触れる機会がなかったので、いい練習の機会になったと思いました。
最後に、ゲーム作るのは大変でした。
本編です。
1213①②16③④
④⑤⑥22⑦②⑧
⑥④⑦⑤er④→?
+ +ヒント1:僕は22です(年齢じゃないよ)
+ +ヒント2:①~⑧に入るのは数字ではなくアルファベット
+ +ヒント3:このイベントはずばり…?
+ +答え:mystery
+ diff --git a/src/content/blogs/590/2021-12-22-1-1024x683.png b/src/content/blogs/590/2021-12-22-1-1024x683.png new file mode 100644 index 0000000..042f8f2 Binary files /dev/null and b/src/content/blogs/590/2021-12-22-1-1024x683.png differ diff --git a/src/content/blogs/590/game1.png b/src/content/blogs/590/game1.png new file mode 100644 index 0000000..33a4107 Binary files /dev/null and b/src/content/blogs/590/game1.png differ diff --git a/src/content/blogs/590/osechi2.jpg b/src/content/blogs/590/osechi2.jpg new file mode 100644 index 0000000..0af7c1e Binary files /dev/null and b/src/content/blogs/590/osechi2.jpg differ diff --git a/src/content/blogs/835.md b/src/content/blogs/835.md index ed7a342..47fec72 100644 --- a/src/content/blogs/835.md +++ b/src/content/blogs/835.md @@ -73,7 +73,7 @@ OUCC は、当時部室を学外に所有していました。これは、学内 とはいえ、こう見えて面積は割と広く、色々なところに目を瞑れば駅チカで格安の、学生団体には十分な部室でした。講習会やハッカソンを行ったり、布団があるので泊まる人が居たり、大量のゲーム設備 (後述) で交流を深めたり、と COVID-19 のパンデミック前には大いに活用されていたようです。 ### Advent Calendar (12 月) -毎年恒例 [OUCC Advent Calendar 2020](https://adventar.org/calendars/5546) が行われました。自分は「[SHARP Brain 用アプリケーションの作成方法](https://blog.oucc.org/archives/303)」なる記事を書きました。裏話としては、この内容は今では [Brain Wiki](https://brain.fandom.com/ja/wiki/Brain_Wiki) にあるのですが、それは私が後で Brain Wiki の管理者を引き継いで内容を反映したからであって、丁寧に開発方法をまとめた記事は当時まだありませんでした。部員以外にも、部室の話で (何故か失われていた) OB さんとのコネが復活したため、昔の OB さんも記事を書いてくださいました。~~その割に全然 25 記事に達していないのは内緒。~~ +毎年恒例 [OUCC Advent Calendar 2020](https://adventar.org/calendars/5546) が行われました。自分は「[SHARP Brain 用アプリケーションの作成方法](/blog/303)」なる記事を書きました。裏話としては、この内容は今では [Brain Wiki](https://brain.fandom.com/ja/wiki/Brain_Wiki) にあるのですが、それは私が後で Brain Wiki の管理者を引き継いで内容を反映したからであって、丁寧に開発方法をまとめた記事は当時まだありませんでした。部員以外にも、部室の話で (何故か失われていた) OB さんとのコネが復活したため、昔の OB さんも記事を書いてくださいました。~~その割に全然 25 記事に達していないのは内緒。~~ ### 金曜部室 (1 月) COVID-19 によって活動がかなり縮小したことが懸念事項となり、その解決策が話し合われました。その結果、金曜日の夜に Discord に集まって交流会をしたり雑談会をしたりといった緩い集会を開き、部員同士の交流を維持しようとする試み「金曜部室」が始まりました。これは、時期に合わせて履修相談会にしたり LT 会を開催したりと一定の成功を見せ、ネタが無くなってマンネリ化した 2021 年度の終わりまで続きました。 diff --git a/src/content/blogs/870.md b/src/content/blogs/870.md index 1ff439b..afa313c 100644 --- a/src/content/blogs/870.md +++ b/src/content/blogs/870.md @@ -178,7 +178,7 @@ tags: [advent-calendar] ### Advent Calendar (12 月) 毎年恒例 [OUCC Advent Calendar 2021](https://adventar.org/calendars/6722) です。今回は部室の引っ越しのクライマックスと被ったことでかなり厳しかったです。その結果、12 記事しか集まらず、それも後半のみという寂しい感じになりました。しかし、OUCC 部員でない方が 1 つ記事を埋めてくれたのには、公開コミュニティ化の手応えを感じました。 -ちなみに、私は「[テトリスの電子辞書移植](https://blog.oucc.org/archives/490)」という記事を書きました。締め切り直前に書き始め、ブログシステムのトラブルによって結局間に合わなかった迷作です。 +ちなみに、私は「[テトリスの電子辞書移植](/blog/490)」という記事を書きました。締め切り直前に書き始め、ブログシステムのトラブルによって結局間に合わなかった迷作です。 ### 役職再編 (12-1 月) 実際の運営状況を反映し、旧来の役職体系を再編しました。それぞれの責任範囲を明確にし、「これは誰がやるのか」問題を減らそうとも試みました。「これは誰がやるのか」というのが曖昧なものって、結局誰もやらないので私に回ってきていたんですよね。そういう意味でも、運営の健全化において重要でした。なお、部室係はここで廃止したものの、半年後に需要が出てきたため復活させました。 diff --git a/src/content/tags/blendar.json b/src/content/tags/blendar.json new file mode 100644 index 0000000..03b08a9 --- /dev/null +++ b/src/content/tags/blendar.json @@ -0,0 +1,3 @@ +{ + "name": "blendar" +} diff --git a/src/content/tags/mixamo.json b/src/content/tags/mixamo.json new file mode 100644 index 0000000..6859e66 --- /dev/null +++ b/src/content/tags/mixamo.json @@ -0,0 +1,3 @@ +{ + "name": "Mixamo" +}