...
This commit is contained in:
parent
08eb83a0a5
commit
34d27386d5
19 changed files with 9136 additions and 10496 deletions
19265
MyObsidianVault/.obsidian/plugins/calc-craft/main.js
vendored
19265
MyObsidianVault/.obsidian/plugins/calc-craft/main.js
vendored
File diff suppressed because it is too large
Load diff
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "calc-craft",
|
||||
"name": "CalcCraft",
|
||||
"version": "2.2.7",
|
||||
"version": "2.3.7",
|
||||
"minAppVersion": "0.15.0",
|
||||
"description": "have formulas like in excel a1+a2, or sum()",
|
||||
"author": "klaudyu",
|
||||
|
|
|
|||
|
|
@ -120,23 +120,25 @@ td.label-cell.row {
|
|||
/* Hide original text when showing computed value */
|
||||
.cm-table-widget .table-cell-wrapper.calc-overlay-cell:not(:focus-within) {
|
||||
position: relative;
|
||||
color: transparent;
|
||||
font-size: 0; /* Collapse the text so it doesn't affect layout */
|
||||
line-height: 0;
|
||||
}
|
||||
|
||||
|
||||
/* Base overlay - inherits color from parent cell */
|
||||
.cm-table-widget .table-cell-wrapper.calc-overlay-cell:not(:focus-within)::after {
|
||||
content: attr(data-calc-display);
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
white-space: pre;
|
||||
color: inherit; /* ← Changed from var(--text-normal) to inherit */
|
||||
pointer-events: none;
|
||||
padding: 0 4px;
|
||||
content: attr(data-calc-display);
|
||||
position: relative; /* Changed from absolute */
|
||||
display: inline-block; /* Changed to allow sizing */
|
||||
white-space: pre;
|
||||
color: inherit;
|
||||
font-size: 1rem; /* Restore normal font size */
|
||||
line-height: normal; /* Restore normal line height */
|
||||
padding: 0 4px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
|
||||
/* Formula cell overlays - inherit formula colors */
|
||||
.cm-table-widget .formula-cell-colorenabled .table-cell-wrapper.calc-overlay-cell:not(:focus-within)::after {
|
||||
color: var(--CalcCraft_formula_font_color_light);
|
||||
|
|
@ -181,3 +183,54 @@ td.label-cell.row {
|
|||
.theme-dark .cm-table-widget .cell-children-highlight .table-cell-wrapper.calc-overlay-cell:not(:focus-within)::after {
|
||||
color: var(--CalcCraft_formula_font_children_dark);
|
||||
}
|
||||
|
||||
/* Make table cells position relative for absolute positioning of labels */
|
||||
table th,
|
||||
table td {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* Add padding to table to make room for labels */
|
||||
table {
|
||||
margin-left: 25px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
/* Column labels - display above th/td elements */
|
||||
th[data-col-letter]::before,
|
||||
td[data-col-letter]::before {
|
||||
content: attr(data-col-letter);
|
||||
position: absolute;
|
||||
top: -18px;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
font-size: 0.75em;
|
||||
color: var(--text-muted);
|
||||
font-weight: normal;
|
||||
pointer-events: none;
|
||||
white-space: nowrap;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
/* Row labels - display to the left of first cell in each row */
|
||||
tr th:first-child[data-row-number]::after,
|
||||
tr td:first-child[data-row-number]::after {
|
||||
content: attr(data-row-number);
|
||||
position: absolute;
|
||||
left: -25px;
|
||||
top: 50%;
|
||||
#transform: translateY(-50%);
|
||||
font-size: 0.75em;
|
||||
color: var(--text-muted);
|
||||
font-weight: normal;
|
||||
pointer-events: none;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Escaped text cells - look like normal text, not formulas */
|
||||
.cm-table-widget .escaped-text-cell .table-cell-wrapper.calc-overlay-cell:not(:focus-within)::after {
|
||||
color: var(--text-normal); /* Normal text color, not formula color */
|
||||
}
|
||||
|
||||
|
|
@ -10,27 +10,53 @@ class GdscriptSyntaxPlugin extends obsidian.Plugin {
|
|||
// onload, so continue to try and define the language until it is.
|
||||
const setupInterval = setInterval(() => {
|
||||
if (CodeMirror && CodeMirror.defineSimpleMode) {
|
||||
const KEYWORDS = new Set([
|
||||
'and','as','assert','await','break','breakpoint','const','continue','elif','else','enum',
|
||||
'for','if','in','master','mastersync','match','not','null','or','pass','preload',
|
||||
'puppet','puppetsync','remote','remotesync','return','self','setget','static','tool',
|
||||
'var','while','yield'
|
||||
]);
|
||||
|
||||
const mode = {
|
||||
start: [
|
||||
{ regex: /\b0x[0-9a-f]+\b/i, token: "number" },
|
||||
{ regex: /\b-?\d+\b/, token: "number" },
|
||||
{ regex: /\b0x[0-9a-f]+\b/i, token: 'number' },
|
||||
{ regex: /\b-?\d+\b/, token: 'number' },
|
||||
{ regex: /#.+/, token: 'comment' },
|
||||
{ regex: /\s*(@onready|@export)\b/, token: 'keyword' },
|
||||
{ regex: /\b(?:and|as|assert|await|break|breakpoint|const|continue|elif|else|enum|for|if|in|is|master|mastersync|match|not|null|or|pass|preload|puppet|puppetsync|remote|remotesync|return|self|setget|static|tool|var|while|yield)\b/, token: 'keyword' },
|
||||
{ regex: /[()\[\]{},]/, token: "meta" },
|
||||
{ regex: /[()\[\]{},]/, token: 'meta' },
|
||||
|
||||
// The words following func, class_name and class should be highlighted as attributes,
|
||||
// so push onto the definition stack
|
||||
{ regex: /\b(func|class_name|class|extends|signal)\b/, token: "keyword", push: "definition" },
|
||||
{ regex: /\b(func|class_name|class|extends|signal|is)\b/, token: 'keyword', push: 'definition' },
|
||||
|
||||
{ regex: /@?(?:("|')(?:(?!\1)[^\n\\]|\\[\s\S])*\1(?!"|')|"""(?:[^\\]|\\[\s\S])*?""")/, token: "string" },
|
||||
{ regex: /@?(?:("|')(?:(?!\1)[^\n\\]|\\[\s\S])*\1(?!"|')|"""(?:[^\\]|\\[\s\S])*?""")/, token: 'string' },
|
||||
{ regex: /\$[\w\/]+\b/, token: 'variable' },
|
||||
{ regex: /\:[\s]*$/, token: 'operator' },
|
||||
{ regex: /\:[ ]*/, token: 'meta', push: 'var_type' },
|
||||
{ regex: /\->[ ]*/, token: 'operator', push: 'definition' },
|
||||
{ regex: /\+|\*|-|\/|:=|>|<|\^|&|\||%|~|=/, token: "operator" },
|
||||
{ regex: /\+|\*|-|\/|:=|>|<|\^|&|\||%|~|=/, token: 'operator' },
|
||||
{ regex: /\b(?:false|true)\b/, token: 'number' },
|
||||
{ regex: /\b[A-Z][A-Z_\d]*\b/, token: 'operator' },
|
||||
|
||||
// Function calls on objects: object.doSomething()
|
||||
{
|
||||
regex: /(\.)([A-Za-z_]\w*)(?=\s*\()/,
|
||||
token: ['operator', 'variable'],
|
||||
},
|
||||
|
||||
// Normal function calls: doSomething()
|
||||
{
|
||||
regex: /[A-Za-z_]\w*(?=\s*\()/,
|
||||
token: 'variable',
|
||||
},
|
||||
|
||||
{
|
||||
regex: /[A-Za-z_]\w*/,
|
||||
token: (match) => {
|
||||
const word = Array.isArray(match) ? match[0] : match;
|
||||
return KEYWORDS.has(word) ? 'keyword' : null;
|
||||
}
|
||||
},
|
||||
],
|
||||
var_type: [
|
||||
{ regex: /(\w+)/, token: 'attribute', pop: true },
|
||||
|
|
|
|||
|
|
@ -6,5 +6,5 @@
|
|||
"isDesktopOnly": false,
|
||||
"minAppVersion": "1.5.12",
|
||||
"name": "GDScript Syntax Highlighting",
|
||||
"version": "1.0.3"
|
||||
"version": "1.1.0"
|
||||
}
|
||||
|
|
@ -1,4 +1,6 @@
|
|||
{
|
||||
"copyLinkToElemenetAnchorTo100": false,
|
||||
"copyFrameLinkByName": false,
|
||||
"disableDoubleClickTextEditing": false,
|
||||
"folder": "",
|
||||
"cropFolder": "",
|
||||
|
|
@ -39,6 +41,9 @@
|
|||
"overrideObsidianFontSize": false,
|
||||
"dynamicStyling": "colorful",
|
||||
"isLeftHanded": false,
|
||||
"desktopUIMode": "tray",
|
||||
"tabletUIMode": "compact",
|
||||
"phoneUIMode": "mobile",
|
||||
"iframeMatchExcalidrawTheme": true,
|
||||
"matchTheme": false,
|
||||
"matchThemeAlways": false,
|
||||
|
|
@ -72,6 +77,7 @@
|
|||
"focusOnFileTab": true,
|
||||
"openInMainWorkspace": true,
|
||||
"showLinkBrackets": true,
|
||||
"syncElementLinkWithText": false,
|
||||
"allowCtrlClick": true,
|
||||
"forceWrap": false,
|
||||
"pageTransclusionCharLimit": 200,
|
||||
|
|
@ -119,9 +125,7 @@
|
|||
"mdBorderColor": "Black",
|
||||
"mdCSS": "",
|
||||
"scriptEngineSettings": {},
|
||||
"defaultTrayMode": true,
|
||||
"compactModeOnTablets": true,
|
||||
"previousRelease": "2.16.1",
|
||||
"previousRelease": "2.20.5",
|
||||
"showReleaseNotes": true,
|
||||
"compareManifestToPluginVersion": true,
|
||||
"showNewVersionNotification": true,
|
||||
|
|
@ -130,6 +134,7 @@
|
|||
"taskboneEnabled": false,
|
||||
"taskboneAPIkey": "",
|
||||
"pinnedScripts": [],
|
||||
"sidepanelTabs": [],
|
||||
"customPens": [
|
||||
{
|
||||
"type": "default",
|
||||
|
|
@ -484,6 +489,7 @@
|
|||
"aiEnabled": true,
|
||||
"openAIAPIToken": "",
|
||||
"openAIDefaultTextModel": "gpt-3.5-turbo-1106",
|
||||
"openAIDefaultTextModelMaxTokens": 4096,
|
||||
"openAIDefaultVisionModel": "gpt-4o",
|
||||
"openAIDefaultImageGenerationModel": "dall-e-3",
|
||||
"openAIURL": "https://api.openai.com/v1/chat/completions",
|
||||
|
|
@ -811,6 +817,9 @@
|
|||
"alignment": "center",
|
||||
"margin": "normal"
|
||||
},
|
||||
"disableContextMenu": false,
|
||||
"defaultTrayMode": true,
|
||||
"compactModeOnTablets": true,
|
||||
"autosaveInterval": 15000,
|
||||
"mathjaxSourceURL": "https://cdn.jsdelivr.net/npm/mathjax@3.2.1/es5/tex-svg.js"
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -1,9 +1,9 @@
|
|||
{
|
||||
"id": "obsidian-excalidraw-plugin",
|
||||
"name": "Excalidraw",
|
||||
"version": "2.16.1",
|
||||
"version": "2.20.5",
|
||||
"minAppVersion": "1.5.7",
|
||||
"description": "An Obsidian plugin to edit and view Excalidraw drawings",
|
||||
"description": "Sketch Your Mind. An Obsidian plugin to edit and view Excalidraw drawings. Enter the world of 4D Visual PKM.",
|
||||
"author": "Zsolt Viczian",
|
||||
"authorUrl": "https://excalidraw-obsidian.online",
|
||||
"fundingUrl": "https://ko-fi.com/zsolt",
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,126 @@
|
|||
Hier ist dein **"Asset-Zoll"** – eine kompakte Checkliste, die du als `README.md` direkt in deinen Projektordner legen kannst. Sie dient als deine **Pillar**, damit du nach drei Monaten Pause nicht erst googeln musst, warum die Texturen in Godot plötzlich lila sind oder das Haus so groß wie ein Planet ist.
|
||||
|
||||
---
|
||||
|
||||
## 🛂 Die Asset-Zoll Checkliste (Blender 5 ➔ Godot 4.6)
|
||||
|
||||
Bevor ein (gekauftes) Asset in die Spielwelt darf, muss es diese Stationen durchlaufen:
|
||||
|
||||
### 1. Die Blender-Inspektion (Vorbereitung)
|
||||
|
||||
- [ ] **Scale & Rotation:** `Strg + A` -> _All Transforms_. (Scale muss auf 1.0 stehen, sonst spielt die Physik in Godot verrückt).
|
||||
|
||||
- [ ] **Ausrichtung:** Die Nase des Modells zeigt in Blender nach **-Z** (Forward), der Kopf nach **+Y** (Up).
|
||||
|
||||
- [ ] **Mesh-Check:** `M` -> _Merge by Distance_ (entfernt doppelte Vertices, die oft in Kauf-Assets stecken).
|
||||
|
||||
- [ ] **Material-Namen:** Gib Materialien sprechende Namen (z.B. `M_Stone_Dark`). Vermeide "Material.001".
|
||||
|
||||
|
||||
### 2. Die Godot-Automatisierung (Suffixe)
|
||||
|
||||
Nutze Godots Import-Hints direkt in Blender, um dir Klickarbeit zu sparen. Benenne die Objekte im Outliner um:
|
||||
|
||||
- [ ] **Kollision:** Anhängsel `-col` am Objektnamen (erzeugt automatisch ein _StaticBody_ + _CollisionShape_).
|
||||
|
||||
- [ ] **Navigation:** Anhängsel `-navmesh` (für KI-Laufwege).
|
||||
|
||||
- [ ] **Details:** `-noimp` (falls du Hilfsobjekte hast, die nicht exportiert werden sollen).
|
||||
|
||||
|
||||
### 3. Der Export (GLTF 2.0)
|
||||
|
||||
- [ ] **Format:** `.glb` (ist meist kompakter und performanter für Godot).
|
||||
|
||||
- [ ] **Include:** _Selected Objects_ (verhindert, dass die Blender-Kamera mit im Spiel landet).
|
||||
|
||||
- [ ] **Data:** _UVs_, _Normals_ und _Vertex Colors_ müssen angehakt sein.
|
||||
|
||||
|
||||
### 4. Die Godot-Ankunft (Import-Tab)
|
||||
|
||||
- [ ] **Import As:** Wähle zwischen `Static Body` (für Häuser/Deko) oder `Scene` (für Interaktives).
|
||||
|
||||
- [ ] **Material Storage:** Stelle auf `Files (.tres)` um, wenn du die Materialien in Godot finetunen willst, ohne dass Blender sie beim nächsten Re-Import überschreibt.
|
||||
|
||||
|
||||
---
|
||||
|
||||
### Dein nächster "Playground" Schritt:
|
||||
|
||||
Suche dir ein gekauftes Asset aus, das dir gefällt (z.B. eine Kiste oder eine Säule). Versuche, es **nur mit dieser Checkliste** innerhalb von 5 Minuten fehlerfrei nach Godot zu bringen, inklusive funktionierender Kollision.
|
||||
|
||||
|
||||
|
||||
Um ein NWN-ähnliches Spiel mit Assets aus verschiedenen Quellen stimmig wirken zu lassen, ist ein **Master-Material** (in Godot: _Global Shader_ oder ein _Base Material Override_) deine wichtigste **Pillar**.
|
||||
|
||||
Gekaufte Assets kommen oft mit völlig unterschiedlichen Glanzwerten oder Sättigungen. Wenn du sie einfach so zusammenwürfelst, sieht es aus wie ein bunter Flickenteppich.
|
||||
|
||||
Hier ist die Strategie, wie du ein einheitliches "Look & Feel" erzwingst:
|
||||
|
||||
---
|
||||
|
||||
### 1. Die Pillar: Das "Standard3DMaterial" Preset
|
||||
|
||||
Anstatt jedes Asset einzeln anzupassen, erstellst du ein **Basis-Template**, das die Assets "bändigt".
|
||||
|
||||
**Schritt-für-Schritt in Godot 4.6:**
|
||||
|
||||
1. Erstelle im Dateisystem einen neuen Ordner `Resources/Materials`.
|
||||
|
||||
2. Rechtsklick -> **New Resource** -> **StandardMaterial3D**. Nenne es `M_Global_Base.tres`.
|
||||
|
||||
3. Aktiviere unter **Proximity Fade** (für weiche Übergänge am Boden) oder **Distance Fade**, falls du Objekte sanft ausblenden willst.
|
||||
|
||||
4. **Wichtig für den NWN-Look:** Gehe zu **Sampling** und setze den _Filter_ auf `Nearest` (für einen leicht pixeligen Retro-Look) oder `Linear` (für modernen Look).
|
||||
|
||||
5. **Shading:** Setze _Diffuse Mode_ auf `Burley` und _Specular Mode_ auf `SchlickGGX`.
|
||||
|
||||
|
||||
### 2. Der "Bändiger"-Trick (Material Override)
|
||||
|
||||
Wenn du ein gekauftes Haus-Asset in deine Szene ziehst, hat es oft schon 10 Materialien dabei. Anstatt alle 10 zu ändern:
|
||||
|
||||
- Klicke das Mesh im Inspektor an.
|
||||
|
||||
- Suche das Feld **Geometry** -> **Material Override**.
|
||||
|
||||
- Ziehe dein `M_Global_Base.tres` dort hinein.
|
||||
|
||||
- **Das Problem:** Jetzt ist alles einfarbig.
|
||||
|
||||
- **Die Lösung:** Nutze **Material Variations**. Rechtsklick auf dein `M_Global_Base.tres` -> **New Inherited Resource**. So behältst du die Grundeinstellungen (wie Schatten-Logik oder Glanz), kannst aber die Textur für das spezifische Haus austauschen.
|
||||
|
||||
|
||||
### 3. Der Playground: Die "Atmosphären-Box"
|
||||
|
||||
Hier kommt der Spieltrieb ins Spiel. Erschaffe eine kleine Test-Umgebung, um den Look zu kalibrieren.
|
||||
|
||||
- **Experiment:** Erstelle eine `WorldEnvironment` Node.
|
||||
|
||||
- **Spiel mit den "Götter-Reglern":**
|
||||
|
||||
- **Tonemap:** Stelle sie auf `Filmic` oder `ACES`. Das lässt billige Assets sofort hochwertiger wirken.
|
||||
|
||||
- **SSAO (Ambient Occlusion):** Schalte es ein! Das erzeugt dunkle Schatten in den Ecken, wo Objekte den Boden berühren. Das "erdet" gekaufte Assets in deiner Welt.
|
||||
|
||||
- **Fog (Nebel):** Nutze _Volumetric Fog_. Ein leichter bläulicher Nebel lässt die Distanz Tiefe gewinnen (sehr wichtig für die NWN-Perspektive von oben).
|
||||
|
||||
|
||||
---
|
||||
|
||||
### Dein Tracking-Tipp für das Lab-Journal:
|
||||
|
||||
Schreibe dir eine **"Look-Referenz"** auf:
|
||||
|
||||
> _"Meine Welt nutzt immer Tonemap: ACES, Exposure: 1.2 und SSAO Intensity: 1.5. Wenn ich in 3 Monaten zurückkomme und alles flach aussieht – check die WorldEnvironment!"_
|
||||
|
||||
---
|
||||
|
||||
### Nächster Schritt für dich:
|
||||
|
||||
Da NWN ein **Top-Down/Isometrisches** Spiel ist, ist die Kamera-Perspektive entscheidend für den Look der Assets.
|
||||
|
||||
**Soll ich dir ein kleines Godot-Script schreiben, mit dem du eine "NWN-Style" Kamera erstellst, die dem Spieler folgt und sich per Mausrad drehen/zoomen lässt?** (Das wäre ein super Playground-Projekt für den nächsten Einstieg!)
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
`sudo apt update`
|
||||
`sudo apt install git-lfs`
|
||||
`git lfs install`
|
||||
|
|
@ -0,0 +1 @@
|
|||
Anwendung der Pillar & Playground Strategie ( Fundament & Freiraum )
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
1_add_repo.sh
|
||||
```bash
|
||||
# Add Docker's official GPG key:
|
||||
sudo apt-get update
|
||||
sudo apt-get install ca-certificates curl
|
||||
sudo install -m 0755 -d /etc/apt/keyrings
|
||||
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
|
||||
sudo chmod a+r /etc/apt/keyrings/docker.asc
|
||||
|
||||
# Add the repository to Apt sources:
|
||||
echo \
|
||||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
|
||||
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
|
||||
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
sudo apt-get update
|
||||
```
|
||||
|
||||
2_install_docker.sh
|
||||
```bash
|
||||
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
||||
```
|
||||
|
||||
3_install_forgejo.sh
|
||||
```bash
|
||||
docker pull codeberg.org/forgejo/forgejo:11.0.1
|
||||
```
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
DAZ Studio -> Rendering
|
||||
Con: Zum Preis jeden Asset Einkaufs kommt noch die Interactive License mit 50€ pro pop dazu. TEUER !!!
|
||||
|
|
@ -1,46 +0,0 @@
|
|||
|
||||
==___Question:___==
|
||||
**If i decide on using blender for rigging and animation, so i only need 3d models, is there a more efficient way to obtain models ?**
|
||||
|
||||
==___Answer:___==
|
||||
**If you only need 3D models (without pre-rigged or pre-animated assets) and plan to handle rigging and animation yourself in Blender, you can pursue more cost-effective and efficient options focused purely on high-quality base meshes or character models. This approach can save costs since rigged and animated assets generally command premium prices.**
|
||||
|
||||
## More Efficient Ways to Obtain Models for Blender Rigging/Animation
|
||||
|
||||
1. **Buy Base Human Models / Character Meshes Only**
|
||||
- Many asset stores offer detailed, high-poly or game-ready base human models without rigging and animations.
|
||||
- These are usually priced lower than fully rigged/animated characters.
|
||||
- Examples: CGTrader, TurboSquid, Sketchfab, and specialized artists on ArtStation.
|
||||
- You can filter searches specifically for “non-rigged” or “base mesh” to save money.
|
||||
|
||||
2. **Use Free High-Quality 3D Human Base Meshes**
|
||||
- Some communities and projects offer free or affordable high-quality base meshes suitable for rigging.
|
||||
- Examples include MakeHuman (free customizable human models), ManuelBastioniLAB (Blender add-on for characters), or open-source character base meshes.
|
||||
- These can be imported directly into Blender for rigging and animation.
|
||||
|
||||
3. **Purchase Modular Character Parts or Assets**
|
||||
- Instead of full characters, consider modular parts (head, torso, limbs, clothes) that you assemble and customize in Blender.
|
||||
- This can increase variety and cost efficiency by reusing parts across multiple characters.
|
||||
|
||||
4. **Use Subscription or Asset Libraries**
|
||||
- Subscriptions to services like CG Cookie, Quixel Megascans, or Sketchfab Pro might provide access to large libraries of human models you can use for Blender rigging.
|
||||
- This is economical if you require many models over time.
|
||||
|
||||
5. **Commission Bulk Models from Artists**
|
||||
- Hiring freelance 3D artists for bulk base models might be more cost-effective depending on scale and quality needs.
|
||||
- Platforms like Fiverr, Upwork, or ArtStation commissions can help here.
|
||||
|
||||
|
||||
## Advantages of This Approach
|
||||
|
||||
- Significant cost savings compared to buying fully rigged/animated characters.
|
||||
- Full control over rigging and animation quality and style in Blender.
|
||||
- Flexibility in customization and equipment integration.
|
||||
|
||||
## Summary
|
||||
|
||||
If you plan to do your own rigging and animation in Blender, the most efficient way is to acquire base human 3D models only, either via lower-cost purchases, free high-quality base meshes, or modular asset packs. This cuts costs drastically compared to bundled rigged/animated assets like Reallusion’s and gives you the highest workflow control and customization power in Blender.[my3dmodels+2](https://my3dmodels.com/blogs/3d-world/the-ultimate-guide-to-free-and-paid-3d-human-models-for-your-next-project)
|
||||
|
||||
1. [https://my3dmodels.com/blogs/3d-world/the-ultimate-guide-to-free-and-paid-3d-human-models-for-your-next-project](https://my3dmodels.com/blogs/3d-world/the-ultimate-guide-to-free-and-paid-3d-human-models-for-your-next-project)
|
||||
2. [https://discussions.reallusion.com/t/godot-import-recommendations/14175](https://discussions.reallusion.com/t/godot-import-recommendations/14175)
|
||||
3. [https://www.reddit.com/r/godot/comments/1icyqbl/character_creation_software_options_for_godot/](https://www.reddit.com/r/godot/comments/1icyqbl/character_creation_software_options_for_godot/)
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
Minimalistic
|
||||
Client & Server in einem
|
||||
2D mit gerenderter Grafik
|
||||
|
||||
Designanspruch: Minimalistisch, maximal erweiterbar, mit simpler Struktur
|
||||
|
||||
Eingekaufte Grafik, Rendering in Blender
|
||||
|
||||
Avatars:
|
||||
Part 1: 1 Avatar, HumanGenerator, AutoRigPro, Mixamo Geh, Kampf, Sterbe-Animation
|
||||
Part 2: Reallusion Investment
|
||||
Loading…
Add table
Add a link
Reference in a new issue