Skip to content

Commit 37d1748

Browse files
committed
updated fonts and attribution section
1 parent 3baec9d commit 37d1748

4 files changed

Lines changed: 197 additions & 33 deletions

File tree

‎README.md‎

Lines changed: 94 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4004,6 +4004,98 @@ Commercial engines with generous free tiers.
40044004

40054005
[Contributions welcome!](contributing.md) Please read the guidelines before submitting a pull request.
40064006

4007-
## Footnotes
4007+
## Attribution
40084008

4009-
Original curation + [Houdini Nerd](https://discord.gg/E9zA9Ft) (Christopher Rutledge) + [Best 3D Resources](https://annethai.notion.site/) (Anne Thai) + community contributions.
4009+
<details>
4010+
<summary>Sources & contributors</summary>
4011+
4012+
Curated by [Devanshu Tak](https://devanshutak.xyz).
4013+
4014+
Built with help from:
4015+
4016+
- [Houdini Nerd](https://discord.gg/E9zA9Ft) — Christopher Rutledge
4017+
- [Best 3D Resources](https://annethai.notion.site/) — Anne Thai
4018+
- Community contributions via [GitHub](https://github.com/devanshutak25/3d-resources)
4019+
- Compiled with the help of [Claude Code](https://claude.com/claude-code)
4020+
4021+
**Automated ingest sources:**
4022+
4023+
- [80 Level](https://80.lv)
4024+
- [Gumroad](https://gumroad.com)
4025+
- [itch.io](https://itch.io)
4026+
- YouTube channels & playlists
4027+
4028+
**GitHub awesome-lists mined (70):**
4029+
4030+
- [agarcialeon/awesome-unity](https://github.com/agarcialeon/awesome-unity)
4031+
- [agmmnn/awesome-blender](https://github.com/agmmnn/awesome-blender)
4032+
- [aishwaryanr/awesome-generative-ai-guide](https://github.com/aishwaryanr/awesome-generative-ai-guide)
4033+
- [Alinshans/awesome-cg](https://github.com/Alinshans/awesome-cg)
4034+
- [AtakanFire/Awesome-Unreal-Engine](https://github.com/AtakanFire/Awesome-Unreal-Engine)
4035+
- [awesome-NeRF/awesome-NeRF](https://github.com/awesome-NeRF/awesome-NeRF)
4036+
- [AxiomeCG/awesome-threejs](https://github.com/AxiomeCG/awesome-threejs)
4037+
- [bcmi/Awesome-Generative-Image-Composition](https://github.com/bcmi/Awesome-Generative-Image-Composition)
4038+
- [bcmi/Awesome-Image-Composition](https://github.com/bcmi/Awesome-Image-Composition)
4039+
- [bertjiazheng/Awesome-CAD](https://github.com/bertjiazheng/Awesome-CAD)
4040+
- [bluesfdw/awesome-CAD](https://github.com/bluesfdw/awesome-CAD)
4041+
- [brabadu/awesome-fonts](https://github.com/brabadu/awesome-fonts)
4042+
- [brandonhimpfen/awesome-generative-ai](https://github.com/brandonhimpfen/awesome-generative-ai)
4043+
- [calinou/awesome-gamedev](https://github.com/calinou/awesome-gamedev)
4044+
- [camilleroux/awesome-generative-art](https://github.com/camilleroux/awesome-generative-art)
4045+
- [cgwire/awesome-cg-vfx-pipeline](https://github.com/cgwire/awesome-cg-vfx-pipeline)
4046+
- [cjroth/awesome-vr](https://github.com/cjroth/awesome-vr)
4047+
- [Coop56/awesome-unreal](https://github.com/Coop56/awesome-unreal)
4048+
- [cutbypham/awesome-davinci-resolve](https://github.com/cutbypham/awesome-davinci-resolve)
4049+
- [dharmeshkakadia/awesome-AR](https://github.com/dharmeshkakadia/awesome-AR)
4050+
- [Domeee/awesome-augmented-reality](https://github.com/Domeee/awesome-augmented-reality)
4051+
- [drwpow/awesome-oss-fonts](https://github.com/drwpow/awesome-oss-fonts)
4052+
- [ellisonleao/magictools](https://github.com/ellisonleao/magictools)
4053+
- [ericjang/awesome-graphics](https://github.com/ericjang/awesome-graphics)
4054+
- [eug/awesome-opengl](https://github.com/eug/awesome-opengl)
4055+
- [filipecalegario/awesome-generative-ai](https://github.com/filipecalegario/awesome-generative-ai)
4056+
- [fire/awesome-godot-procedural-manual-generation](https://github.com/fire/awesome-godot-procedural-manual-generation)
4057+
- [FronkonGames/Awesome-Gamedev](https://github.com/FronkonGames/Awesome-Gamedev)
4058+
- [haxiomic/awesome-gamedev](https://github.com/haxiomic/awesome-gamedev)
4059+
- [iamtpb/awesome-photography](https://github.com/iamtpb/awesome-photography)
4060+
- [ibaaj/awesome-OpenSourcePhotography](https://github.com/ibaaj/awesome-OpenSourcePhotography)
4061+
- [inlife/awesome-ae](https://github.com/inlife/awesome-ae)
4062+
- [insthync/awesome-unreal](https://github.com/insthync/awesome-unreal)
4063+
- [Kavex/GameDev-Resources](https://github.com/Kavex/GameDev-Resources)
4064+
- [KelvinAnymoree/awesome-cg-pipeline](https://github.com/KelvinAnymoree/awesome-cg-pipeline)
4065+
- [kidult00/awesome-AR](https://github.com/kidult00/awesome-AR)
4066+
- [loonghao/awesome-cg-pipeline](https://github.com/loonghao/awesome-cg-pipeline)
4067+
- [luisdnsantos/awesome-computer-graphics](https://github.com/luisdnsantos/awesome-computer-graphics)
4068+
- [mbrukman/awesome-game-dev](https://github.com/mbrukman/awesome-game-dev)
4069+
- [mdyao/Awesome-3D-AIGC](https://github.com/mdyao/Awesome-3D-AIGC)
4070+
- [melbvr/awesome-VR](https://github.com/melbvr/awesome-VR)
4071+
- [mnrmja007/awesome-virtual-reality](https://github.com/mnrmja007/awesome-virtual-reality)
4072+
- [MrNeRF/awesome-3D-gaussian-splatting](https://github.com/MrNeRF/awesome-3D-gaussian-splatting)
4073+
- [MrPeker/awesome-illustrations](https://github.com/MrPeker/awesome-illustrations)
4074+
- [nathakits/awesome-cinema4d](https://github.com/nathakits/awesome-cinema4d)
4075+
- [natnew/Awesome-Generative-AI](https://github.com/natnew/Awesome-Generative-AI)
4076+
- [oli-z/awesome-filmmaking](https://github.com/oli-z/awesome-filmmaking)
4077+
- [olucurious/Awesome-ARCore](https://github.com/olucurious/Awesome-ARCore)
4078+
- [olucurious/Awesome-ARKit](https://github.com/olucurious/Awesome-ARKit)
4079+
- [querielo/awesome-computer-graphics](https://github.com/querielo/awesome-computer-graphics)
4080+
- [rive-app/awesome-rive](https://github.com/rive-app/awesome-rive)
4081+
- [rng70/Awesome-Fonts](https://github.com/rng70/Awesome-Fonts)
4082+
- [shlomif/awesome-graphics-programming](https://github.com/shlomif/awesome-graphics-programming)
4083+
- [Siilwyn/awesome-pixel-art](https://github.com/Siilwyn/awesome-pixel-art)
4084+
- [sjfricke/awesome-webgl](https://github.com/sjfricke/awesome-webgl)
4085+
- [steven2358/awesome-generative-ai](https://github.com/steven2358/awesome-generative-ai)
4086+
- [teamgravitydev/gamedev-free-resources](https://github.com/teamgravitydev/gamedev-free-resources)
4087+
- [terkelg/awesome-creative-coding](https://github.com/terkelg/awesome-creative-coding)
4088+
- [terrehbyte/awesome-ue4](https://github.com/terrehbyte/awesome-ue4)
4089+
- [TheFrenchGhosty/awesome-art](https://github.com/TheFrenchGhosty/awesome-art)
4090+
- [tobiasbueschel/awesome-WebAR](https://github.com/tobiasbueschel/awesome-WebAR)
4091+
- [tom-choi/awesome-cg-pipeline](https://github.com/tom-choi/awesome-cg-pipeline)
4092+
- [tomByrer/awesome-unreal-engine](https://github.com/tomByrer/awesome-unreal-engine)
4093+
- [UEProjectXmples/awesome-ue5](https://github.com/UEProjectXmples/awesome-ue5)
4094+
- [unclamped/awesome-vr](https://github.com/unclamped/awesome-vr)
4095+
- [UnityCommunity/AwesomeUnityCommunity](https://github.com/UnityCommunity/AwesomeUnityCommunity)
4096+
- [vanrez-nez/awesome-glsl](https://github.com/vanrez-nez/awesome-glsl)
4097+
- [waitin2010/awesome-computer-graphics](https://github.com/waitin2010/awesome-computer-graphics)
4098+
- [wentianli/awesome-video-editing](https://github.com/wentianli/awesome-video-editing)
4099+
- [wyhinton/AwesomeHoudini](https://github.com/wyhinton/AwesomeHoudini)
4100+
4101+
</details>

‎assets/css/style.css‎

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
background: var(--bg-secondary);
66
border: 1px solid var(--border);
77
border-radius: 8px;
8-
padding: 0.75rem 1rem;
8+
padding: 0.75rem 1rem 0.85rem;
99
margin: 0 0 2rem 0;
1010
z-index: 100;
1111
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
@@ -21,16 +21,22 @@
2121
justify-content: flex-end;
2222
pointer-events: none;
2323
}
24-
#filter-bar.collapsed > :not(#filter-toggle) { display: none !important; }
25-
#filter-bar.collapsed #filter-toggle {
24+
#filter-bar.collapsed > :not(.filter-header) { display: none !important; }
25+
#filter-bar.collapsed .filter-header > .filter-title { display: none; }
26+
#filter-bar.collapsed .filter-header {
27+
margin: 0;
2628
pointer-events: auto;
2729
position: sticky;
2830
top: 0.5rem;
2931
}
32+
.filter-header {
33+
display: flex;
34+
align-items: center;
35+
justify-content: space-between;
36+
gap: 0.75rem;
37+
margin-bottom: 0.6rem;
38+
}
3039
#filter-toggle {
31-
position: absolute;
32-
top: 0.5rem;
33-
right: 0.5rem;
3440
background: var(--bg-tertiary);
3541
color: var(--text-muted);
3642
border: 1px solid var(--border);
@@ -41,14 +47,13 @@
4147
align-items: center;
4248
justify-content: center;
4349
cursor: pointer;
44-
font-size: 1rem;
50+
font-size: 1.1rem;
4551
line-height: 1;
4652
padding: 0;
47-
z-index: 1;
53+
flex-shrink: 0;
4854
}
4955
#filter-toggle:hover { color: var(--text); border-color: var(--accent); }
5056
#filter-bar.collapsed #filter-toggle {
51-
position: static;
5257
background: var(--bg-secondary);
5358
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
5459
}
@@ -58,13 +63,12 @@
5863
color: var(--text);
5964
letter-spacing: 0.12em;
6065
text-transform: uppercase;
61-
margin-bottom: 0.5rem;
6266
}
6367
.filter-top {
6468
display: flex;
6569
gap: 0.75rem;
6670
align-items: center;
67-
margin-bottom: 0.5rem;
71+
margin-bottom: 0.75rem;
6872
}
6973
#filter-search {
7074
flex: 1;
@@ -94,18 +98,28 @@
9498
}
9599
#filter-clear:hover { color: var(--text); border-color: var(--accent); }
96100
.filter-row {
101+
display: grid;
102+
grid-template-columns: 6.5rem 1fr;
103+
align-items: start;
104+
gap: 0.5rem 0.75rem;
105+
margin: 0.5rem 0;
106+
}
107+
.filter-row > .filter-chip {
108+
/* chips live in the second column — wrap them in an inline group */
109+
}
110+
.filter-row .filter-chips {
97111
display: flex;
98112
flex-wrap: wrap;
99-
align-items: center;
100113
gap: 0.35rem;
101-
margin: 0.4rem 0;
102114
}
103115
.filter-label {
104-
font-size: 0.75rem;
116+
font-size: 0.7rem;
105117
color: var(--text-subtle);
106118
text-transform: uppercase;
107-
letter-spacing: 0.05em;
108-
min-width: 5.5rem;
119+
letter-spacing: 0.08em;
120+
font-weight: 700;
121+
padding-top: 0.25rem;
122+
line-height: 1.4;
109123
}
110124
.filter-chip {
111125
background: var(--bg-tertiary);
@@ -127,10 +141,11 @@
127141
border-color: var(--accent);
128142
}
129143
.filter-more {
130-
margin-top: 0.5rem;
144+
margin-top: 0.75rem;
131145
border-top: 1px solid var(--border);
132-
padding-top: 0.5rem;
146+
padding-top: 0.6rem;
133147
}
148+
.filter-more[open] { padding-bottom: 0.25rem; }
134149
.filter-more summary {
135150
color: var(--text-muted);
136151
font-size: 0.85rem;

‎assets/js/filter.js‎

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
'use strict';
66

77
const DATA_URL = '/data.json';
8-
const EXCLUDED_H2_IDS = new Set(['contents', 'contributing', 'footnotes']);
8+
const EXCLUDED_H2_IDS = new Set(['contents', 'contributing', 'footnotes', 'attribution']);
99

1010
const CATEGORY_OPTIONS = [
1111
'assets-libraries', 'modeling-sculpting-texturing', 'animation-rigging',
@@ -31,7 +31,20 @@
3131
const PLATFORM_OPTIONS = ['win', 'mac', 'linux', 'web', 'ios', 'ipad', 'android', 'cloud'];
3232
const PLATFORM_LABELS = { win: 'Windows', mac: 'macOS', linux: 'Linux', web: 'Web', ios: 'iOS', ipad: 'iPad', android: 'Android', cloud: 'Cloud' };
3333
const WORKFLOW_OPTIONS = ['modeling', 'sculpting', 'retopo', 'uv', 'texturing', 'material-authoring', 'rigging', 'animation', 'mocap', 'simulation', 'fx', 'lighting', 'rendering', 'compositing', 'editing', 'audio-design'];
34+
const WORKFLOW_LABELS = {
35+
'modeling': 'Modeling', 'sculpting': 'Sculpting', 'retopo': 'Retopo', 'uv': 'UV',
36+
'texturing': 'Texturing', 'material-authoring': 'Material Authoring',
37+
'rigging': 'Rigging', 'animation': 'Animation', 'mocap': 'MoCap',
38+
'simulation': 'Simulation', 'fx': 'FX', 'lighting': 'Lighting',
39+
'rendering': 'Rendering', 'compositing': 'Compositing',
40+
'editing': 'Editing', 'audio-design': 'Audio Design'
41+
};
3442
const OUTPUT_OPTIONS = ['games', 'film-vfx', 'broadcast', 'archviz', 'product-viz', 'motion-graphics', 'illustration', 'xr'];
43+
const OUTPUT_LABELS = {
44+
'games': 'Games', 'film-vfx': 'Film & VFX', 'broadcast': 'Broadcast',
45+
'archviz': 'ArchViz', 'product-viz': 'Product Viz',
46+
'motion-graphics': 'Motion Graphics', 'illustration': 'Illustration', 'xr': 'XR'
47+
};
3548

3649
const active = {
3750
search: '',
@@ -244,14 +257,25 @@
244257
lab.className = 'filter-label';
245258
lab.textContent = label;
246259
row.appendChild(lab);
247-
for (const v of options) row.appendChild(makeChip(group, v, labelMap ? labelMap[v] : v));
260+
const chips = document.createElement('div');
261+
chips.className = 'filter-chips';
262+
for (const v of options) chips.appendChild(makeChip(group, v, labelMap ? labelMap[v] : v));
263+
row.appendChild(chips);
248264
bar.appendChild(row);
249265
}
250266

251267
function buildUI() {
252268
const bar = document.createElement('div');
253269
bar.id = 'filter-bar';
254270

271+
const header = document.createElement('div');
272+
header.className = 'filter-header';
273+
274+
const title = document.createElement('div');
275+
title.className = 'filter-title';
276+
title.textContent = 'Filter';
277+
header.appendChild(title);
278+
255279
const toggle = document.createElement('button');
256280
toggle.id = 'filter-toggle';
257281
toggle.type = 'button';
@@ -272,12 +296,8 @@
272296
try { localStorage.setItem('filter-collapsed', collapsed ? '1' : '0'); } catch (e) {}
273297
setToggleIcon();
274298
});
275-
bar.appendChild(toggle);
276-
277-
const title = document.createElement('div');
278-
title.className = 'filter-title';
279-
title.textContent = 'Filter';
280-
bar.appendChild(title);
299+
header.appendChild(toggle);
300+
bar.appendChild(header);
281301

282302
const top = document.createElement('div');
283303
top.className = 'filter-top';
@@ -323,14 +343,14 @@
323343
const more = document.createElement('details');
324344
more.className = 'filter-more';
325345
const summary = document.createElement('summary');
326-
summary.textContent = 'More filters (license, platform, workflow, output)';
346+
summary.textContent = 'More filters';
327347
more.appendChild(summary);
328348
const moreBody = document.createElement('div');
329349
more.appendChild(moreBody);
330350
makeGroup(moreBody, 'License', 'license', LICENSE_OPTIONS);
331351
makeGroup(moreBody, 'Platform', 'platform', PLATFORM_OPTIONS, PLATFORM_LABELS);
332-
makeGroup(moreBody, 'Workflow', 'workflow', WORKFLOW_OPTIONS);
333-
makeGroup(moreBody, 'Output', 'output', OUTPUT_OPTIONS);
352+
makeGroup(moreBody, 'Workflow', 'workflow', WORKFLOW_OPTIONS, WORKFLOW_LABELS);
353+
makeGroup(moreBody, 'Output', 'output', OUTPUT_OPTIONS, OUTPUT_LABELS);
334354
bar.appendChild(more);
335355

336356
// Insert right before the "Contents" heading (so at rest, bar sits above ToC, below intro).

‎scripts/render.js‎

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,15 +127,52 @@ function renderSection(section) {
127127
return lines.join('\n');
128128
}
129129

130+
function buildAwesomeList() {
131+
const dir = path.join(__dirname, '..', '_maintenance', 'awesome-mining');
132+
if (!fs.existsSync(dir)) return [];
133+
const files = fs.readdirSync(dir).filter(f => f.endsWith('.md')).sort((a, b) => a.localeCompare(b, 'en', { sensitivity: 'base' }));
134+
return files.map(f => {
135+
const name = f.replace(/\.md$/, '');
136+
const i = name.indexOf('_');
137+
const owner = name.slice(0, i);
138+
const repo = name.slice(i + 1);
139+
return `- [${owner}/${repo}](https://github.com/${owner}/${repo})`;
140+
});
141+
}
142+
130143
function footer() {
144+
const awesome = buildAwesomeList();
131145
return [
132146
'## Contributing',
133147
'',
134148
'[Contributions welcome!](contributing.md) Please read the guidelines before submitting a pull request.',
135149
'',
136-
'## Footnotes',
150+
'## Attribution',
151+
'',
152+
'<details>',
153+
'<summary>Sources & contributors</summary>',
154+
'',
155+
'Curated by [Devanshu Tak](https://devanshutak.xyz).',
156+
'',
157+
'Built with help from:',
158+
'',
159+
'- [Houdini Nerd](https://discord.gg/E9zA9Ft) — Christopher Rutledge',
160+
'- [Best 3D Resources](https://annethai.notion.site/) — Anne Thai',
161+
'- Community contributions via [GitHub](https://github.com/devanshutak25/3d-resources)',
162+
'- Compiled with the help of [Claude Code](https://claude.com/claude-code)',
163+
'',
164+
'**Automated ingest sources:**',
165+
'',
166+
'- [80 Level](https://80.lv)',
167+
'- [Gumroad](https://gumroad.com)',
168+
'- [itch.io](https://itch.io)',
169+
'- YouTube channels & playlists',
170+
'',
171+
`**GitHub awesome-lists mined (${awesome.length}):**`,
172+
'',
173+
...awesome,
137174
'',
138-
'Original curation + [Houdini Nerd](https://discord.gg/E9zA9Ft) (Christopher Rutledge) + [Best 3D Resources](https://annethai.notion.site/) (Anne Thai) + community contributions.',
175+
'</details>',
139176
''
140177
].join('\n');
141178
}

0 commit comments

Comments
 (0)