Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Participants: Derya Akbaba * Ben Allen * Natalia-Rozalia Avlona * Kirill Azernyi * Erin Kathleen Bahl * Natasha Bajc * Lucas Bang * Tully Barnett * Ivette Bayo * Eamonn Bell * John Bell * kiki benzon * Liat Berdugo * Kathi Berens * David Berry * Jeffrey Binder * Philip Borenstein * Gregory Bringman * Sophia Brueckner * Iris Bull * Zara Burton * Evan Buswell * Ashleigh Cassemere-Stanfield * Brooke Cheng* Alm Chung * Jordan Clapper * Lia Coleman * Imani Cooper * David Cuartielles * Edward de Jong * Pierre Depaz * James Dobson * Quinn Dombrowski * Amanda Du Preez * Tristan Espinoza * Emily Esten * Meredith Finkelstein * Caitlin Fisher * Luke Fischbeck * Leonardo Flores * Laura Foster * Federica Frabetti * Jorge Franco * Dargan Frierson * Arianna Gass * Marshall Gillson * Jan Grant * Rosi Grillmair * Ben Grosser * E.L. (Eloisa) Guerrero * Yan Guo * Saksham Gupta * Juan Gutierrez * Gottfried Haider * Nabil Hassein * Chengbo He * Brian Heim * Alexis Herrera * Paul Hertz * shawné michaelain holloway * Stefka Hristova * Simon Hutchinson * Mai Ibrahim * Bryce Jackson * Matt James * Joey Jones * Masood Kamandy * Steve Klabnik * Goda Klumbyte * Rebecca Koeser * achim koh * Julia Kott * James Larkby-Lahet * Milton Laufer * Ryan Leach * Clarissa Lee * Zizi Li * Lilian Liang * Keara Lightning * Chris Lindgren * Xiao Liu * Paloma Lopez * Tina Lumbis * Ana Malagon * Allie Martin * Angelica Martinez * Alex McLean * Chandler McWilliams * Sedaghat Payam Mehdy * Chelsea Miya * Uttamasha Monjoree * Nick Montfort * Stephanie Morillo * Ronald Morrison * Anna Nacher * Maxwell Neely-Cohen * Gutierrez Nicholaus * David Nunez * Jooyoung Oh * Mace Ojala * Alexi Orchard * Steven Oscherwitz * Bomani Oseni McClendon * Kirsten Ostherr * Julia Polyck-O'Neill * Andrew Plotkin * Preeti Raghunath * Nupoor Ranade * Neha Ravella * Amit Ray * David Rieder * Omar Rizwan * Barry Rountree * Jamal Russell * Andy Rutkowski * samara sallam * Mark Sample * Zehra Sayed * Kalila Shapiro * Renee Shelby * Po-Jen Shih * Nick Silcox * Patricia Silva * Lyle Skains * Winnie Soon * Claire Stanford * Samara Hayley Steele * Morillo Stephanie * Brasanac Tea * Denise Thwaites * Yiyu Tian * Lesia Tkacz * Fereshteh Toosi * Alejandra Trejo Rodriguez * Álvaro Triana * Job van der Zwan * Frances Van Scoy * Dan Verständig * Roshan Vid * Yohanna Waliya * Sam Walkow * Kuan Wang * Laurie Waxman * Jacque Wernimont * Jessica Westbrook * Zach Whalen * Shelby Wilson * Avery J. Wiscomb * Grant Wythoff * Cy X * Hamed Yaghoobian * Katherine Ye * Jia Yu * Nikoleta Zampaki * Bret Zawilski * Jared Zeiders * Kevin Zhang * Jessica Zhou * Shuxuan Zhou

Guests: Kayla Adams * Sophia Beall * Daisy Bell * Hope Carpenter * Dimitrios Chavouzis * Esha Chekuri * Tucker Craig * Alec Fisher * Abigail Floyd * Thomas Forman * Emily Fuesler * Luke Greenwood * Jose Guaraco * Angelina Gurrola * Chandler Guzman * Max Li * Dede Louis * Caroline Macaulay * Natasha Mandi * Joseph Masters * Madeleine Page * Mahira Raihan * Emily Redler * Samuel Slattery * Lucy Smith * Tim Smith * Danielle Takahashi * Jarman Taylor * Alto Tutar * Savanna Vest * Ariana Wasret * Kristin Wong * Helen Yang * Katherine Yang * Renee Ye * Kris Yuan * Mei Zhang
Coordinated by Mark Marino (USC), Jeremy Douglass (UCSB), and Zach Mann (USC). Sponsored by the Humanities and Critical Code Studies Lab (USC), and the Digital Arts and Humanities Commons (UCSB).

Tick in Unreal Engine

Title: Tick
By: Epic Games
Code: C++

*Function called every frame on this Actor. Override this function to implement custom logic to be executed every frame. *Note that Tick is disabled by default, and you will need to check PrimaryActorTick.bCanEverTick is set to true to enable it. * *@param DeltaSeconds Game time elapsed during last frame modified by the time dilation

virtual void Tick( float DeltaSeconds );

Overview
Tick is the method used on Unreal Engine to allow programmers to execute code before each frame of the game is rendered.
This code is executed several times per second, and it's critical for the overall performance of the game. In a conservative scenario, a video game rendering at 30 frames per second will call this function at least one time for each actor.

Questions for Discussion
Some of my questions are derived from my lack of experience in academic research, so please bear with me :smile:

  • The sample code is the virtual declaration of the method. There are several implementations of it in the Unreal Engine source code and a lot more for each custom implementation. Should I work with the virtual declaration or use some of the definitions?
  • One of the subjects that interest me is the power hierarchy that Game Engines have. Maybe it would be interesting to dig into the power relationships that this kind of structure can create between the engine's creators and the developers using that technology. I would love to hear your opinions on this.
  • The other subject is related to the human perception and this kind of code that executes at great speed and makes a lot of operations to generate the images we see in a video game. The thing with this option is that I don't know where to start :/
  • I also would love to hear any other ideas

Comments

  • human perception and this kind of code that executes at great speed and makes a lot of operations to generate the images we see in a video game. The thing with this option is that I don't know where to start :/

    For me, it is sometimes helpful to start with a prototypical or extremely atypical. So something prototypical might be Unreal Tournament, and how it uses Tick, for example. Something atypical might be some Unreal-based art project or conceptual experiment that is playing with perception -- and might be using Tick in surprising or revealing ways at the limits of expected design.

    The thing that is challenging about starting with a method that is used by almost everything, everywhere... is that it is everywhere! When I am getting thousands of hits for it in a code base, I can browse, but sometimes I then need to refine the question....

    Should I work with the virtual declaration or use some of the definitions?

    Personally I would say either or both, whichever seems more productive to you! Many people (like me!) may not be fully familiar with what a C++ virtual function is, so it might be worth touching on some of the very basics -- what the role of Actor is in the Unreal framework, if Actor is abstract and whether an implementation is required for any Actor, if an Actor can have a Tick() that does nothing....

  • @jeremydouglass said:
    Personally I would say either or both, whichever seems more productive to you! Many people (like me!) may not be fully familiar with what a C++ virtual function is, so it might be worth touching on some of the very basics -- what the role of Actor is in the Unreal framework, if Actor is abstract and whether an implementation is required for any Actor, if an Actor can have a Tick() that does nothing....

    Thanks a lot, Jeremy. I'll play around with your ideas and see which one fits better :)

  • I've been trying to structure some writing exercises to work with this code. I don't have an exact idea of what I'm gonna find, but I believe that as an exercise, they can be of help. I'm posting here the intended structure to hear your opinions about it and also to see if there is one of them that may be of particular interest.

    1. A basic description: How do Unreal Engine works and how this Tick function affects everything that happens in the video game.
    2. The virtual functions: I would like here to take an approach centered in the Seriality Studies and how the virtual functions allow the serialization of code.
    3. A shared visualization: This tool is used frequently in the visual research field, and I wish to emulate it here. I want to work with two groups of programmers, one with Unreal Engine experience and others without it, and talk with them and see what kind of remarks they do about the code. It would be great to have a third group, with no programming knowledge, just to see what happens :)
    4. Distant reading: I would like to do some kind of distant reading, taking the multiples definitions of the Tick function and see what kind of patters, if any, do emerge.

    I would try to finish at least one of these items within the duration of this workgroup, so if there is any interest in one of them, it will help me a lot to know it so that I can prioritize my work. Thanks to all :)

  • The virtual functions: I would like here to take an approach centered in the Seriality Studies and how the virtual functions allow the serialization of code.

    They all sound interesting, but I personally was particularly curious about this because I'm not sure I understand. By Seriality Studies, which specific authors / traditions are you referring to -- I have seen this used in a few ways. The feminist tradition, or the study of serial narrative forms, or both, or...?

  • @jeremydouglass said:

    The virtual functions: I would like here to take an approach centered in the Seriality Studies and how the virtual functions allow the serialization of code.

    They all sound interesting, but I personally was particularly curious about this because I'm not sure I understand. By Seriality Studies, which specific authors / traditions are you referring to -- I have seen this used in a few ways. The feminist tradition, or the study of serial narrative forms, or both, or...?

    Thanks, your questions are helpful to me :)
    I was referring specifically to the Digital Series, as presented by Shane Denson in this project: http://kairos.technorhetoric.net/22.1/topoi/denson/index.html
    I used a similar framework for my thesis project, but I didn't examine the Unreal Engine code as much as I would want to. In the example project, in the Case Study section, he shows some visual techniques that may be useful to work with a big codebase.
    Maybe with this example, it will be more clear what I was trying to say :)

  • Hi!
    It has been jam-packed days, and I'm not progressing as I would like. Nevertheless, I'm committed to keeping my work on this topic. However, I would like to receive and advice about how to continue once this workgroup ends. Because I'm not a teacher or an academic researcher, I don't know which could be a good way to share the progress and troubles of my work and improve based on the feedback. Is there any online community to keep the exercise going? Any other advice?
    Thanks a lot :)

  • The tick function is a very interesting one to me. Not only because it's executed that often and thus seems to be essential to the performance, but also due to it's definition in relation to the actor (https://docs.unrealengine.com/en-US/Programming/UnrealArchitecture/Actors/Ticking/index.html).

    Since you are mentioning power relations, it is (imho) super interesting to examine the discussions online on how to implement the tick() function "right" or efficient. This makes the quesion explicit who is actually acting and being acted upon? The programmer, coder or the framework, engine? A possible lead might be the discussion on how to "bend" implementations in order to gain performance and effectiveness at the same time. I don't know, if there is any of this online, since I did no deeper research by now, but I'm curious and saved a lot of youtube videos(+ discussions below) to watch later.

    Additionally: analyzing the tick function's usage on github for example, as @jeremydouglass suggested might be a good way, I was thinking of forking several repos and rebuilding an overview over the different use cases in an own repository.

    @alvarotriana said:
    Hi!
    It has been jam-packed days, and I'm not progressing as I would like. Nevertheless, I'm committed to keeping my work on this topic. However, I would like to receive and advice about how to continue once this workgroup ends. Because I'm not a teacher or an academic researcher, I don't know which could be a good way to share the progress and troubles of my work and improve based on the feedback. Is there any online community to keep the exercise going? Any other advice?
    Thanks a lot :)

    Directly working with github, not only for research, but also to reassemble and distribute the findings might be an elegant way to go further. It also allows other users to watch your work and get in touch with you via the discussions. I'd love to follow your research and progress over there on github.

  • Great question.

    One method would be to create a web-accessible repo with your code and use its facilities to add comments, create analysis in logs or documentation files, experiment with modifications using named branches, or use the issues feature to open questions that you want to investigate / resolve. This would then give you urls that you could tweet / email etc. For example, if you used GitHub, you could also invite or @ directly people already on that platform to have code-centric conversations.

    Another would be to create a research blog that hosts a diary of your work -- e.g. WordPress, Tumblr etc.

    Another would be to choose an appropriate forum -- e.g. a forum on Unity programming, for example -- and start a long-running mega-thread on your investigation. This would depend on the forum and its community norms, of course.

    I wonder if anyone else has suggestions on this?

    Currently the Working Group doesn't host a running forum / listserv for ongoing projects, but we could also think about the possibilities there.....

Sign In or Register to comment.