Warhammer 40k

I don’t think he writes for black library anymore

really?? I wonder what happened. I think I enjoyed his stuff.

I’m so far behind on the advancements they’ve made to the 40k storyline.

Which book series covers the new stuff??
 
Looking at ADB's Facebook he stills seems to be working for Games Workshop working on the Siege of Terra Heresy stuff.

For 40k he's working on some Chaos book at the moment.

The latest book series for 40k was called Gathering Storm followed by Dark Imperium about the return of Guilliman.
 
I'm a little proud of this one. I got sick of Meshmixer being such a buggy and hard to use mess so I made my own program in Matlab to find ideal orientations of parts in order to minimize overhang. You give it the file and some settings and it crunches all the possible orientations at your chosen resolution and then does a second pass on all the best candidates at a higher resolution. It then gives you a sorted list of the best orientations, a graph of all the results, and the top six options so you can compare them.
example1.png example2.png
Each one of the 3D models can be rotated independently so you can compare the results. Here's the code in the off chance any of you have Matlab and want to run it yourself. On my computer (Ryzen 1600x) it can run a 20mb STL to one degree precision in about two minutes or a 1.5mb STL in 10 seconds.
Code:
clear
clc
% you need to have this script, the stlread function (by Eric Johnson
% https://www.mathworks.com/matlabcentral/fileexchange/22409-stl-file-reader),
% and the file to be analyzed all in the same working directory.

% The output rotations should be applied one at a time, in the order of
% Z then X.

% Choose your file.
filename='your_model_here.stl';

% Acceptable overhang angle (in degrees).  Must be between 0-90 with 45
% generally considered the standard.
acceptable_angle=45;

% Choose how many iterations you want to test.  This will be automatically
% rounded if it does not produce equaly sized steps.  4050 will produce
% orientations in four degree increments; 16200 for two degrees; 64800
% for one degree.
iterations=64800;

% Choose the radius (in degrees) used to exclude nearby local minimums when
% culling the results.  This prevents a noisy plot from producing many
% local minimums all within a small range to the exclusion of candiates
% in other orientations.
search_radius=30;

% Choose maximum number of local minimums to consider for refinement after
% culling is completed.
minimum_limit=10;

% Choose refinement iterations.  Set to zero to not run refinement.  This
% should be at least 50 to be worth the time.  Like with iterations this
% will be rounded if necessary to produce even spacing.
refinements=225;

% Show graphs?  1 or 0.
show_graphs=1;


% % % From here on is the functional code.  DO NOT CHANGE.
% Import the file
[F,V,N]=stlread(filename);
F=F';
V=V';
N=N';
[whatever,faces]=size(F);

% define steps
Rx_steps=round(sqrt(iterations/2));
Rz_steps=Rx_steps*2;
[Rx,Rz]=meshgrid(0:180/Rx_steps:180, 0:360/Rz_steps:360-360/Rz_steps);

% Define storage matrix
N_temp=N;
overhang_factor=zeros(Rx_steps+1,Rz_steps)';

% Find each face area
vector1=zeros(3,faces);
vector2=zeros(3,faces);
for x=1:faces
    vector1(:,x)=(V(:,x*3)-V(:,x*3-1))';
    vector2(:,x)=(V(:,x*3)-V(:,x*3-2))';
end
temp=cross(vector1,vector2);
Area=(sqrt(temp(1,:).^2+temp(2,:).^2+temp(3,:).^2)/2);

% Set plane vectors for finding angles
plane=zeros(size(N));
plane(3,:)=-1;


%do top orientation, all z rotations will be the same
N_temp=N;
% find angles, setting anything above the threshold to 90 so they
% don't count towards the area calculation
plate_angle=acosd(dot(N_temp,plane));
angle_modified=plate_angle;
angle_modified(angle_modified(:,:)>acceptable_angle)=90;
projected_factor=sum(abs(cosd(angle_modified).*Area));
overhang_factor(:,1)=projected_factor;

%do bottom orientation, all z rotations will be the same
% rotate to bottom
Ty=[cosd(180),0,sind(180);0,1,0;-sind(180),0,cosd(180)];
N_temp=Ty*N;
% angles
plate_angle=acosd(dot(N_temp,plane));
angle_modified=plate_angle;
angle_modified(angle_modified(:,:)>acceptable_angle)=90;
projected_factor=sum(abs(cosd(angle_modified).*Area));
overhang_factor(:,Rx_steps+1)=projected_factor;

%do the rest of the orientations
for X=2:Rx_steps
    % show the progam is doing work
    clc
    Initial_Iteration_Progress=X/Rx_steps*100
    for Z=1:Rz_steps
        % do the rotations in sequence, z then x
        Tz=[cosd(Rz(Z,X)),-sind(Rz(Z,X)),0; sind(Rz(Z,X)),cosd(Rz(Z,X)),0; 0,0,1];
        Tx=[1,0,0; 0, cosd(Rx(Z,X)),-sind(Rx(Z,X)); 0,sind(Rx(Z,X)),cosd(Rx(Z,X))];
        N_temp=Tz*N;
        N_temp=Tx*N_temp;
        % angles, again
        plate_angle=acosd(dot(N_temp,plane));
        angle_modified=plate_angle;
        angle_modified(angle_modified(:,:)>acceptable_angle)=90;
        projected_factor=sum(abs(cosd(angle_modified).*Area));
        overhang_factor(Z,X)=projected_factor;
    end
end



% % % Reduce Data
% vectorize
Rx_vector=Rx(:);
Rz_vector=Rz(:);
overhang_factor_vector=overhang_factor(:);
% sort
[overhang_factor_vector,order]=sort(overhang_factor_vector);
Rx_vector=Rx_vector(order);
Rz_vector=Rz_vector(order);

% initialize 'while' count data
[reduced_size,whatever]=size(overhang_factor_vector);
reduce_index=1;
% loop through the whole thing, need while loop because data it is
% dynamically resized
while reduce_index<=reduced_size
    deleteme=zeros(size(overhang_factor_vector));
    % set all points within range of current point to be deleted
    deleteme(Rx_vector<=Rx_vector(reduce_index)+search_radius ...
        & Rx_vector>=Rx_vector(reduce_index)-search_radius ...
        & Rz_vector<=Rz_vector(reduce_index)+search_radius ...
        & Rz_vector>=Rz_vector(reduce_index)-search_radius)...
        =1;
    deleteme(reduce_index)=0; %don't delete yourself, dummy
    % delete candidates
    overhang_factor_vector(deleteme==1)=[];
    Rx_vector(deleteme==1)=[];
    Rz_vector(deleteme==1)=[];
    % move on to next step
    reduce_index=reduce_index+1;
    [reduced_size,whatever]=size(overhang_factor_vector);
    % show the program is doing work
end

% keep only the best candidates
if reduced_size>minimum_limit
    overhang_factor_vector=overhang_factor_vector(1:minimum_limit);
    Rx_vector=Rx_vector(1:minimum_limit);
    Rz_vector=Rz_vector(1:minimum_limit);
end




if refinements~=0
    % find the array of sub-angles to test at each location
    sides=round((sqrt(refinements)-1)/2);
    [basic_square_x,basic_square_z]=meshgrid(-sides:sides,-sides:sides);
    basic_square_x=basic_square_x*(180/Rx_steps/(sides+1));
    basic_square_z=basic_square_z*(180/Rx_steps/(sides+1));
  
    % do the refining
    [points_to_refine,whatever]=size(overhang_factor_vector);
    for refine=1:points_to_refine
        refine_square_x=basic_square_x+Rx_vector(refine);
        refine_square_z=basic_square_z+Rz_vector(refine);
        refined_overhang_factor=zeros(size(refine_square_x));
        for X=1:sides*2+1
            for Z=1:sides*2+1
                % do the rotations in sequence, z then x
                Tz=[cosd(refine_square_z(Z,X)),-sind(refine_square_z(Z,X)),0; sind(refine_square_z(Z,X)),cosd(refine_square_z(Z,X)),0; 0,0,1];
                Tx=[1,0,0; 0, cosd(refine_square_x(Z,X)),-sind(refine_square_x(Z,X)); 0,sind(refine_square_x(Z,X)),cosd(refine_square_x(Z,X))];
                N_temp=Tz*N;
                N_temp=Tx*N_temp;
                % angles, again
                plate_angle=acosd(dot(N_temp,plane));
                angle_modified=plate_angle;
                angle_modified(angle_modified(:,:)>acceptable_angle)=90;
                projected_factor=sum(abs(cosd(angle_modified).*Area));
                refined_overhang_factor(Z,X)=projected_factor;
            end
        end
        % vectorize
        refine_square_x=refine_square_x(:);
        refine_square_z=refine_square_z(:);
        refined_overhang_factor=refined_overhang_factor(:);
        % sort
        [refined_overhang_factor,order]=sort(refined_overhang_factor);
        refine_square_x=refine_square_x(order);
        refine_square_z=refine_square_z(order);
        % save
        Rx_vector(refine)=refine_square_x(1);
        Rz_vector(refine)=refine_square_z(1);
        overhang_factor_vector(refine)=refined_overhang_factor(1);
      
        clc
        refining_progress=refine/points_to_refine*100
    end
end






% Give output of candidates
clc
ordered_canditates_Rx_Rz=[Rx_vector,Rz_vector]

if show_graphs==1
    % Plot the Candidates
    figure('name','Results and Candidates','units','normalized','outerposition',[0 0.05 0.6 0.9])
    hold on
    surf(Rx,Rz,overhang_factor,'linestyle','none');
    title(['Projected Surface Area for Faces Below ',num2str(acceptable_angle),' Degrees'])
    xlabel('X Rotation (Degrees)')
    ylabel('Z Rotation (Degrees)')
    axis equal
    axis([0 180 0 360])
    view(0,-90)
    h1=scatter3(Rx_vector,Rz_vector,overhang_factor_vector,'black','filled');
    h2=scatter3(Rx_vector(1),Rz_vector(1),overhang_factor_vector(1),'red','filled');
    legend([h2,h1],'Best Candidate','Other Minimum Candidates','Location','eastoutside')

    % Show the best orientations
    orientations_to_plot=6;
    if minimum_limit<6
        orientations_to_plot=minimum_limit;
    end

    figure('name',['Top ',num2str(orientations_to_plot),' Candidates'],'units','normalized','outerposition',[0.05 0.05 0.9 0.9])
    for x=1:orientations_to_plot
        Tz=[cosd(Rz_vector(x)),-sind(Rz_vector(x)),0; sind(Rz_vector(x)),cosd(Rz_vector(x)),0; 0,0,1];
        Tx=[1,0,0; 0, cosd(Rx_vector(x)),-sind(Rx_vector(x)); 0,sind(Rx_vector(x)),cosd(Rx_vector(x))];
        V_temp=Tz*V;
        V_temp=Tx*V_temp;
        subplot(2,3,x)
        patch('Faces',F','Vertices',V_temp','FaceColor',       [0.8 0.8 1.0], ...
                 'EdgeColor',       'none',        ...
                 'FaceLighting',    'gouraud',     ...
                 'AmbientStrength', 0.15);
        camlight('headlight');
        material('dull');
        axis('image');
        title(['Overhang Area (',num2str(round(overhang_factor_vector(x))),') Orientation (Z ',num2str(round(Rz_vector(x))),' Degrees, X ',num2str(round(Rx_vector(x))),' Degrees)'])
        view([45 45]);
    end
end
 
I never cared for the miniatures outside the coolness of the figures, as it looked like a money sink. However, I always liked Warhammer 40K on the surface. It felt like LOTR in space, merging sci-fi and dark Fantasy, my fav genres is games/storytelling.

Over the last few months I got into the lore and holy fuck it's insanely rich. I really like how much of its origins, aside from our time, is shrouded in mystery.

The vagueness of the dark age is so important in stimulating our imaginations. This is what makes the lore and environmental storytelling in the Dark Souls series so impactful. No one needs to know how Han Solo got his blaster or last name, it kills mystique.

I heard it described as Star Trek to Skynet and eventually space Gothic crusades. You can't really sum it up in one sentence, but that seems appropriate

I'm on book 3 of the Horus Heresy, and I absolutely love it. Eisenhorn is next on my list, as I hear it's getting a tv series adaptation. What would you all suggest?

This is the YT channel that got me into the lore. I stopped in parts, as I wanted to read about the Heresy in the books first, but I love the stories of Old ones, Necron, Eldar, STC's, the Mechanicum and their freaking Titans etc... Even the Orcs are super badass, they are so much more intricate than I ever thought



btw, what's the connection to Warhammer medieval style? Is there one?
 
Last edited:
btw, what's the connection to Warhammer medieval style? Is there one?
WH Fantasy was developed before 40k and a lot of early 40k was basically just the fantasy factions but IN SPACE! with a healthy dose of tropes ripped from popular culture. 40k developed into its own thing over time and its popularity eclipsed Fantasy. I believe that there are no explicit connections between the settings at this point.
 
WH Fantasy was developed before 40k and a lot of early 40k was basically just the fantasy factions but IN SPACE! with a healthy dose of tropes ripped from popular culture. 40k developed into its own thing over time and its popularity eclipsed Fantasy. I believe that there are no explicit connections between the settings at this point.
Thanks man. I'm getting pretty old lol, and I don't recall it ever being so fleshed out. They did a great job with it
 
WH Fantasy was developed before 40k and a lot of early 40k was basically just the fantasy factions but IN SPACE! with a healthy dose of tropes ripped from popular culture. 40k developed into its own thing over time and its popularity eclipsed Fantasy. I believe that there are no explicit connections between the settings at this point.

There is a theory that the WH fantasy world exists in the chaos zone and one of the lost primarchs from 40K is one of the significant figures in the fantasy world. I forget the name, but the theory does dial in the name.
 
I never cared for the miniatures outside the coolness of the figures, as it looked like a money sink. However, I always liked Warhammer 40K on the surface. It felt like LOTR in space, merging sci-fi and dark Fantasy, my fav genres is games/storytelling.

Over the last few months I got into the lore and holy fuck it's insanely rich. I really like how much of its origins, aside from our time, is shrouded in mystery.

The vagueness of the dark age is so important in stimulating our imaginations. This is what makes the lore and environmental storytelling in the Dark Souls series so impactful. No one needs to know how Han Solo got his blaster or last name, it kills mystique.

I heard it described as Star Trek to Skynet and eventually space Gothic crusades. You can't really sum it up in one sentence, but that seems appropriate

I'm on book 3 of the Horus Heresy, and I absolutely love it. Eisenhorn is next on my list, as I hear it's getting a tv series adaptation. What would you all suggest?

This is the YT channel that got me into the lore. I stopped in parts, as I wanted to read about the Heresy in the books first, but I love the stories of Old ones, Necron, Eldar, STC's, the Mechanicum and their freaking Titans etc... Even the Orcs are super badass, they are so much more intricate than I ever thought



btw, what's the connection to Warhammer medieval style? Is there one?


I've enjoyed Armageddon series. Helsreach the book and animated audio novel is awesome. The deathwatch books are good too if you like solid characters.

Any of the anthologies for your favorite chapter are good too, Blood Angel Omnibus, Space Wolf Omnibus, Knights of Caliban, Ultramarine Omnibus.
 
There is a theory that the WH fantasy world exists in the chaos zone and one of the lost primarchs from 40K is one of the significant figures in the fantasy world. I forget the name, but the theory does dial in the name.
Sigmar. As far as I know it's just a fan theory, not something that GW actively promotes. Especially given how GW have developed Fantasy into AoS.
 
So anybody got any hobby new year's resolutions? I slacked badly this last month in my painting and got almost nothing done. So I'm going to try and paint every day, even if it's only for 10-20 minutes at a time.
 
So anybody got any hobby new year's resolutions? I slacked badly this last month in my painting and got almost nothing done. So I'm going to try and paint every day, even if it's only for 10-20 minutes at a time.
Actually play a game for the first time in 2 years
 
So anybody got any hobby new year's resolutions? I slacked badly this last month in my painting and got almost nothing done. So I'm going to try and paint every day, even if it's only for 10-20 minutes at a time.

Need to get my Gloomhaven minis painted, have everything set and ready to go for when I get time... have a fancy new brush, a wet pallete and some new washes to try out.
135008312_10222457344760680_7741870516506093328_o.jpg
 
Second one painted, eyes are such a frustrating pain in the ass, lol.

135363882_10222463690919330_5986737252646196752_o.jpg

Paint the base of the eye with a cotton bud, and then paint the eris by jabbing the eye with a medium brush through the eye of a needle. If you want to get the pupil on, water down the paint and use multiple layers to dot it with the fine brush.
 
Paint the base of the eye with a cotton bud, and then paint the eris by jabbing the eye with a medium brush through the eye of a needle. If you want to get the pupil on, water down the paint and use multiple layers to dot it with the fine brush.

I'll try that on the next one, the eyes on these gloomhaven models aren't as deep/detailed as my Warhammer minis, they're a bit harder to paint for sure.

Im pretty happy with the results for my first model painting in a long time, trying to get some techniques back and stopping the shaky hand, lol.. The first models eyes came out well (using a 5/0 brush for the red eyeball
and a magnifying glass with a needle for just an accent dot of white)
 
Got my first body part of my warlord done. Primed, shaded, colored, washed, varnished. I'm pretty happy with the results, even if it did take longer than I would have liked. I found that the wash step is really easy if I use my airbrush. Just turn down the pressure and it goes on nice and evenly; it's way faster than slopping it on with a brush and has less over-pooling. I think I'll be sticking with this process so the rest of it will end up looking something like this:
foot_comparison.JPG
Oh, and in case anybody likes this look and wants to replicate it, here's the recipes:
Steel Primer:
Vallejo acrylic surface primer - 5x Grey to 1x Black
Steel Shade:
Vallejo acrylic surface primer - 1x Grey to 1x Black
Colors:
Reaper Old Bronze
Reaper True Silver
Oil Wash:
Base half diluted Liquitex Flow Aid (Water 10:1) half Liquitex Matte Medium
Colors are Liquitex Acrylic Inks, 6 Carbon Black and 10 Transparent Raw Umber drops per 1/3Oz dropper bottle (add colors before base so you don't accidentally overflow the bottle, he says from experience)
Neutral Satin Varnish:
Liquitex Acrylic Varnishes, 3x Matte to 1x Gloss varnish
 
Last edited:
Got my first body part of my warlord done. Primed, shaded, colored, washed, varnished. I'm pretty happy with the results, even if it did take longer than I would have liked. I found that the wash step is really easy if I use my airbrush. Just turn down the pressure and it goes on nice and evenly; it's way faster than slopping it on with a brush and has less over-pooling. I think I'll be sticking with this process so the rest of it will end up looking something like this:
Oh, and in the off chance anybody likes this look and wants to replicate it, here's the recipes:
Steel Primer:
Vallejo acrylic surface primer - 5x Grey to 1x Black
Steel Shade:
Vallejo acrylic surface primer - 1x Grey to 1x Black
Colors:
Reaper Old Bronze
Reaper True Silver
Oil Wash:
Base half diluted Liquitex Flow Aid (Water 10:1) half Liquitex Matte Medium
Colors are Liquitex Acrylic Inks, 6 Carbon Black and 10 Transparent Raw Umber drops per 1/3Oz dropper bottle (add colors before base so you don't accidentally overflow the bottle, he says from experience)
Neutral Satin Varnish:
Liquitex Acrylic Varnishes, 3x Matte to 1x Gloss varnish
so many rivets...
 
I'll try that on the next one, the eyes on these gloomhaven models aren't as deep/detailed as my Warhammer minis, they're a bit harder to paint for sure.

Im pretty happy with the results for my first model painting in a long time, trying to get some techniques back and stopping the shaky hand, lol.. The first models eyes came out well (using a 5/0 brush for the red eyeball
and a magnifying glass with a needle for just an accent dot of white)
My painting skills are pretty rudimentary so take any tips with a grain of salt, but I also get shaky hand and find it's a lot more managable if both hands are touching. So I'll have my mini/part in my left hand and brush in the right with my pinky/ring fingers of my right hand touching somewhere on the left hand. For big parts like what I'm working on right now sometimes I have to just touch pinky tips together or even rest on the part itself. But the important part is "linking" the hands by keeping them in even minimal contact. I find it helps enormously.
 
Back
Top