...
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",
|
"id": "calc-craft",
|
||||||
"name": "CalcCraft",
|
"name": "CalcCraft",
|
||||||
"version": "2.2.7",
|
"version": "2.3.7",
|
||||||
"minAppVersion": "0.15.0",
|
"minAppVersion": "0.15.0",
|
||||||
"description": "have formulas like in excel a1+a2, or sum()",
|
"description": "have formulas like in excel a1+a2, or sum()",
|
||||||
"author": "klaudyu",
|
"author": "klaudyu",
|
||||||
|
|
|
||||||
|
|
@ -119,24 +119,26 @@ td.label-cell.row {
|
||||||
|
|
||||||
/* Hide original text when showing computed value */
|
/* Hide original text when showing computed value */
|
||||||
.cm-table-widget .table-cell-wrapper.calc-overlay-cell:not(:focus-within) {
|
.cm-table-widget .table-cell-wrapper.calc-overlay-cell:not(:focus-within) {
|
||||||
position: relative;
|
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 */
|
/* Base overlay - inherits color from parent cell */
|
||||||
.cm-table-widget .table-cell-wrapper.calc-overlay-cell:not(:focus-within)::after {
|
.cm-table-widget .table-cell-wrapper.calc-overlay-cell:not(:focus-within)::after {
|
||||||
content: attr(data-calc-display);
|
content: attr(data-calc-display);
|
||||||
position: absolute;
|
position: relative; /* Changed from absolute */
|
||||||
inset: 0;
|
display: inline-block; /* Changed to allow sizing */
|
||||||
display: flex;
|
white-space: pre;
|
||||||
align-items: center;
|
color: inherit;
|
||||||
white-space: pre;
|
font-size: 1rem; /* Restore normal font size */
|
||||||
color: inherit; /* ← Changed from var(--text-normal) to inherit */
|
line-height: normal; /* Restore normal line height */
|
||||||
pointer-events: none;
|
padding: 0 4px;
|
||||||
padding: 0 4px;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Formula cell overlays - inherit formula colors */
|
/* Formula cell overlays - inherit formula colors */
|
||||||
.cm-table-widget .formula-cell-colorenabled .table-cell-wrapper.calc-overlay-cell:not(:focus-within)::after {
|
.cm-table-widget .formula-cell-colorenabled .table-cell-wrapper.calc-overlay-cell:not(:focus-within)::after {
|
||||||
color: var(--CalcCraft_formula_font_color_light);
|
color: var(--CalcCraft_formula_font_color_light);
|
||||||
|
|
@ -180,4 +182,55 @@ td.label-cell.row {
|
||||||
|
|
||||||
.theme-dark .cm-table-widget .cell-children-highlight .table-cell-wrapper.calc-overlay-cell:not(:focus-within)::after {
|
.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);
|
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.
|
// onload, so continue to try and define the language until it is.
|
||||||
const setupInterval = setInterval(() => {
|
const setupInterval = setInterval(() => {
|
||||||
if (CodeMirror && CodeMirror.defineSimpleMode) {
|
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 = {
|
const mode = {
|
||||||
start: [
|
start: [
|
||||||
{ regex: /\b0x[0-9a-f]+\b/i, token: "number" },
|
{ regex: /\b0x[0-9a-f]+\b/i, token: 'number' },
|
||||||
{ regex: /\b-?\d+\b/, token: "number" },
|
{ regex: /\b-?\d+\b/, token: 'number' },
|
||||||
{ regex: /#.+/, token: 'comment' },
|
{ regex: /#.+/, token: 'comment' },
|
||||||
{ regex: /\s*(@onready|@export)\b/, token: 'keyword' },
|
{ 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,
|
// The words following func, class_name and class should be highlighted as attributes,
|
||||||
// so push onto the definition stack
|
// 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: /\$[\w\/]+\b/, token: 'variable' },
|
||||||
{ regex: /\:[\s]*$/, token: 'operator' },
|
{ regex: /\:[\s]*$/, token: 'operator' },
|
||||||
{ regex: /\:[ ]*/, token: 'meta', push: 'var_type' },
|
{ regex: /\:[ ]*/, token: 'meta', push: 'var_type' },
|
||||||
{ regex: /\->[ ]*/, token: 'operator', push: 'definition' },
|
{ regex: /\->[ ]*/, token: 'operator', push: 'definition' },
|
||||||
{ regex: /\+|\*|-|\/|:=|>|<|\^|&|\||%|~|=/, token: "operator" },
|
{ regex: /\+|\*|-|\/|:=|>|<|\^|&|\||%|~|=/, token: 'operator' },
|
||||||
{ regex: /\b(?:false|true)\b/, token: 'number' },
|
{ regex: /\b(?:false|true)\b/, token: 'number' },
|
||||||
{ regex: /\b[A-Z][A-Z_\d]*\b/, token: 'operator' },
|
{ 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: [
|
var_type: [
|
||||||
{ regex: /(\w+)/, token: 'attribute', pop: true },
|
{ regex: /(\w+)/, token: 'attribute', pop: true },
|
||||||
|
|
|
||||||
|
|
@ -6,5 +6,5 @@
|
||||||
"isDesktopOnly": false,
|
"isDesktopOnly": false,
|
||||||
"minAppVersion": "1.5.12",
|
"minAppVersion": "1.5.12",
|
||||||
"name": "GDScript Syntax Highlighting",
|
"name": "GDScript Syntax Highlighting",
|
||||||
"version": "1.0.3"
|
"version": "1.1.0"
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
{
|
{
|
||||||
|
"copyLinkToElemenetAnchorTo100": false,
|
||||||
|
"copyFrameLinkByName": false,
|
||||||
"disableDoubleClickTextEditing": false,
|
"disableDoubleClickTextEditing": false,
|
||||||
"folder": "",
|
"folder": "",
|
||||||
"cropFolder": "",
|
"cropFolder": "",
|
||||||
|
|
@ -39,6 +41,9 @@
|
||||||
"overrideObsidianFontSize": false,
|
"overrideObsidianFontSize": false,
|
||||||
"dynamicStyling": "colorful",
|
"dynamicStyling": "colorful",
|
||||||
"isLeftHanded": false,
|
"isLeftHanded": false,
|
||||||
|
"desktopUIMode": "tray",
|
||||||
|
"tabletUIMode": "compact",
|
||||||
|
"phoneUIMode": "mobile",
|
||||||
"iframeMatchExcalidrawTheme": true,
|
"iframeMatchExcalidrawTheme": true,
|
||||||
"matchTheme": false,
|
"matchTheme": false,
|
||||||
"matchThemeAlways": false,
|
"matchThemeAlways": false,
|
||||||
|
|
@ -72,6 +77,7 @@
|
||||||
"focusOnFileTab": true,
|
"focusOnFileTab": true,
|
||||||
"openInMainWorkspace": true,
|
"openInMainWorkspace": true,
|
||||||
"showLinkBrackets": true,
|
"showLinkBrackets": true,
|
||||||
|
"syncElementLinkWithText": false,
|
||||||
"allowCtrlClick": true,
|
"allowCtrlClick": true,
|
||||||
"forceWrap": false,
|
"forceWrap": false,
|
||||||
"pageTransclusionCharLimit": 200,
|
"pageTransclusionCharLimit": 200,
|
||||||
|
|
@ -119,9 +125,7 @@
|
||||||
"mdBorderColor": "Black",
|
"mdBorderColor": "Black",
|
||||||
"mdCSS": "",
|
"mdCSS": "",
|
||||||
"scriptEngineSettings": {},
|
"scriptEngineSettings": {},
|
||||||
"defaultTrayMode": true,
|
"previousRelease": "2.20.5",
|
||||||
"compactModeOnTablets": true,
|
|
||||||
"previousRelease": "2.16.1",
|
|
||||||
"showReleaseNotes": true,
|
"showReleaseNotes": true,
|
||||||
"compareManifestToPluginVersion": true,
|
"compareManifestToPluginVersion": true,
|
||||||
"showNewVersionNotification": true,
|
"showNewVersionNotification": true,
|
||||||
|
|
@ -130,6 +134,7 @@
|
||||||
"taskboneEnabled": false,
|
"taskboneEnabled": false,
|
||||||
"taskboneAPIkey": "",
|
"taskboneAPIkey": "",
|
||||||
"pinnedScripts": [],
|
"pinnedScripts": [],
|
||||||
|
"sidepanelTabs": [],
|
||||||
"customPens": [
|
"customPens": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
|
|
@ -484,6 +489,7 @@
|
||||||
"aiEnabled": true,
|
"aiEnabled": true,
|
||||||
"openAIAPIToken": "",
|
"openAIAPIToken": "",
|
||||||
"openAIDefaultTextModel": "gpt-3.5-turbo-1106",
|
"openAIDefaultTextModel": "gpt-3.5-turbo-1106",
|
||||||
|
"openAIDefaultTextModelMaxTokens": 4096,
|
||||||
"openAIDefaultVisionModel": "gpt-4o",
|
"openAIDefaultVisionModel": "gpt-4o",
|
||||||
"openAIDefaultImageGenerationModel": "dall-e-3",
|
"openAIDefaultImageGenerationModel": "dall-e-3",
|
||||||
"openAIURL": "https://api.openai.com/v1/chat/completions",
|
"openAIURL": "https://api.openai.com/v1/chat/completions",
|
||||||
|
|
@ -811,6 +817,9 @@
|
||||||
"alignment": "center",
|
"alignment": "center",
|
||||||
"margin": "normal"
|
"margin": "normal"
|
||||||
},
|
},
|
||||||
|
"disableContextMenu": false,
|
||||||
|
"defaultTrayMode": true,
|
||||||
|
"compactModeOnTablets": true,
|
||||||
"autosaveInterval": 15000,
|
"autosaveInterval": 15000,
|
||||||
"mathjaxSourceURL": "https://cdn.jsdelivr.net/npm/mathjax@3.2.1/es5/tex-svg.js"
|
"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,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"id": "obsidian-excalidraw-plugin",
|
"id": "obsidian-excalidraw-plugin",
|
||||||
"name": "Excalidraw",
|
"name": "Excalidraw",
|
||||||
"version": "2.16.1",
|
"version": "2.20.5",
|
||||||
"minAppVersion": "1.5.7",
|
"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",
|
"author": "Zsolt Viczian",
|
||||||
"authorUrl": "https://excalidraw-obsidian.online",
|
"authorUrl": "https://excalidraw-obsidian.online",
|
||||||
"fundingUrl": "https://ko-fi.com/zsolt",
|
"fundingUrl": "https://ko-fi.com/zsolt",
|
||||||
"helpUrl": "https://github.com/zsviczian/obsidian-excalidraw-plugin#readme",
|
"helpUrl": "https://github.com/zsviczian/obsidian-excalidraw-plugin#readme",
|
||||||
"isDesktopOnly": false
|
"isDesktopOnly": false
|
||||||
}
|
}
|
||||||
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